From ripley at stats.ox.ac.uk  Fri May 29 15:22:54 2009
From: ripley at stats.ox.ac.uk (Prof Brian Ripley)
Date: Fri, 29 May 2009 14:22:54 +0100 (BST)
Subject: [Rd] edge case concerning NA in dim() (PR#13729)
In-Reply-To: <20090529003512.5EB7828320A1@mail.pubhealth.ku.dk>
References: <20090529003512.5EB7828320A1@mail.pubhealth.ku.dk>
Message-ID: <alpine.LFD.2.00.0905291406050.14633@toucan.stats.ox.ac.uk>

On Fri, 29 May 2009, astokes at 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,                  ripley at 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



[Rd] edge case concerning NA in dim() (PR#13729)
Prof Brian Ripley