On Fri, 29 May 2009, asto...@esica.com wrote:
Full_Name: Allan Stokes
Version: 28.1
OS: XP
Submission from: (NULL) (24.108.0.245)
I'm trying to use package HDF5 and have discovered some round-trip errors: save,
load, save is not idempotent. I started digging into the type system to figure
out what type graffiti is fouling this up.
Soon I discovered that comparisons with NULL produce zero length vectors, which
I hadn't known was possible, and I started to wonder about the properties of
zero length objects.
L0 <- logical (0)
dim(L0) <- c(0) # OK
dim(L0) <- c(1) # error
dim(L0) <- c(0,1) # OK
dim(L0) <- c(0,-1) # OK
dim(L0) <- c(0,3.14) # OK, c(0,3) results
dim(L0) <- c(0,FALSE) # OK c(0,0) results
dim(L0) <- c(0,NA) # OK
dim(L0) <- c(1,NA) # error
dim(L0) <- c(1,NA,NA) # OK, SURPRISE!!
NA*NA is normally NA, but in the test for dim() assignment, it appears that
NA*NA == 0, which is then allowed. If the list contains more than one NA
elements, the product seems to evaluate to zero.
The calculation was done in C and failed to take NAs (and indeed
negative values) into account. So
L <- logical(1)
dim(L) <- c(1, -1, -1)
succeeded.
Thank you for the report, changed in R 2.9.0 patched. (Since the
representation of an integer NA is negative, a test for positivity
would have caught this.)
I can see making a case for 0*NA == 0 in this context, but not for NA*NA == 0.
As an aside, I'm not sure why 0*NA does not equal 0 in general evaluation,
unless NA is considered to possibly represent +/-inf.
In fact NA as used here is logical but is coerced to a numeric NA, and
a 'missing' numeric could take any possible value including Inf, -Inf
and NaN.
--
Brian D. Ripley, rip...@stats.ox.ac.uk
Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/
University of Oxford, Tel: +44 1865 272861 (self)
1 South Parks Road, +44 1865 272866 (PA)
Oxford OX1 3TG, UK Fax: +44 1865 272595
______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel