[Rd] [Fwd: buglet (?) in de.restore()]
Duncan Murdoch
murdoch at stats.uwo.ca
Mon Sep 10 16:27:39 CEST 2007
On 9/10/2007 8:47 AM, Ben Bolker wrote:
> I'm resending this after a decent interval of 20 days -- any
> opinions? Should I file it as a bug report? Is it my mistake?
I think a bug report is in order.
>
> cheers
> Ben Bolker
>
>
> -------- Original Message --------
> Subject: buglet (?) in de.restore()
> Date: Tue, 21 Aug 2007 13:29:33 -0400
> From: Ben Bolker <bolker at zoo.ufl.edu>
> To: r-devel at r-project.org
>
>
>
> If one calls data.entry() with a matrix:
>
> A = matrix(0,2,2)
> data.entry(A)
>
> everything works fine except that it triggers a warning:
>
> Warning message:
> the condition has length > 1 and only the first element will be used in:
> if (dim(x) == dim(args[[i]])) rn <- dimnames(args[[i]])[[1]] else rn
> <- NULL
>
> This is triggered by the following lines in de.restore() [in
> src/library/utils/R/de.R]:
>> if( dim(x) == dim(args[[i]]) )
>> rn <- dimnames(args[[i]])[[1]]
>> else rn <- NULL
> It would seem to make sense to replace the condition with
>
> if (nrow(x) == nrow(args[[i]]))
>
> (de.restore() is only called if an element of the list passed to
> data.entry
> has more than one column)
>
> On a side note, I'm curious why
>
>> > A = matrix(0,2,2)
>> > is.vector(A)
>> [1] FALSE
>> > is(A,"vector")
>> [1] TRUE
The glib answer for the first result is that it's because it's
documented that way. I guess it's so that you can distinguish simple
vectors from matrices or other more complex objects.
As to the second, you're testing whether A inherits from the class
"vector", i.e. indexing works on it. Most things in R inherit from
class vector, so that comes out TRUE. (Things that don't: NULL,
environments, some other special stuff.)
Duncan Murdoch
More information about the R-devel
mailing list