[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