[Fwd: buglet (?) in de.restore()]
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