-----Original Message-----
From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-
project.org] On Behalf Of Bert Gunter
Sent: Tuesday, May 01, 2012 1:46 PM
To: Duncan Murdoch
Cc: r-help at r-project.org
Subject: Re: [R] Data frame vs matrix quirk: Hinky error message?
Duncan:
Maybe there **is** a bug, then.
> zmat <- matrix(1:12,nr=4)
zdf <- data.frame(zmat)
ix <- cbind(c(FALSE,TRUE),c(TRUE,TRUE))
zmat[ix]
[,1] [,2] [,3]
[1,] 1 5 9
[2,] NA NA NA
[3,] NA NA NA
[4,] NA NA NA
## ??
Error in `[<-.data.frame`(`*tmp*`, ix, value = NA) :
only logical matrix subscripts are allowed in replacement
That matrix replacement should not work with (in general mixed type)
data frames seems reasonable, actually. Trying to "fix things" may not
be. But I leave this to you and your fellow expeRts,
Cheers,
Bert
On Tue, May 1, 2012 at 11:30 AM, Duncan Murdoch
<murdoch.duncan at gmail.com> wrote:
On 01/05/2012 2:12 PM, Bert Gunter wrote:
Many thanks, Ista:
I only looked in "].default" so the answer is: Alternative 4: dumb
Bert. Rap knuckles with ruler.
Actually, indexing by a logical matrix doesn't make much ?sense to
in either case, as it does not have the effect of selecting
elements, which is what numeric matrix indices do. But that's a
of usage, neither bug nor feature.
If I had gotten something like the error message: "Matrix indices
allowed for replacement in data frames," I would not have been
surprised. But as you said, the behavior **IS** documented.
Your version is not correct: ?matrix indices *are* allowed for
but only logical matrix indices, not two column numerical ones. ? The
message might be clearer if instead of saying "only logical matrix
subscripts are allowed in replacement"
it said "matrix subscripts must be logical matrices in replacement",
think the basic problem is the limitation. ?I'll fix that.
Duncan Murdoch
Best,
Bert
On Tue, May 1, 2012 at 10:49 AM, Ista Zahn<istazahn at gmail.com>
?Hi Bert,
?The failure itself is the documented behavior: ?'[.data.frame'
?"Matrix indexing ('x[i]' with a logical or a 2-column integer
? ? ? matrix 'i') using '[' is not recommended, and barely
? ? ? For extraction, 'x' is first coerced to a matrix. ?For
? ? ? replacement, a logical matrix (only) can be used to select
? ? ? elements to be replaced in the same way as for a matrix."
?The error message may be a bit hinky, as obviously data.frames
?indexed by things other than logical matricies. Or is there
?reason this strikes you as odd?
?Best,
?Ista
?On Tue, May 1, 2012 at 1:33 PM, Bert
Gunter<gunter.berton at gene.com>
?AdvisoRs:
?Is the following a bug, feature, hinky error message, or dumb
?mtest<- matrix(1:12,nr=4)
?dftest<- data.frame(mtest)
?ix<- cbind(1:2,2:3)
?mtest[ix]<- NA
?mtest
? ? ? [,1] [,2] [,3]
?[1,] ? ?1 ? NA ? ?9
?[2,] ? ?2 ? ?6 ? NA
?[3,] ? ?3 ? ?7 ? 11
?[4,] ? ?4 ? ?8 ? 12
?## But ...
?Error in `[<-.data.frame`(`*tmp*`, ix, value = NA) :
? ?only logical matrix subscripts are allowed in replacement
?Obviously, I was expecting matrix indexing for replacement to
?similarly in both cases; however, I can see why it would be
?problematic for data frames (mixed types), but was a bit
groups/pdb-biostatistics/pdb-ncb-home.htm