[Rd] Inconsistencies in subassignment (PR#7210)

Prof Brian Ripley ripley at stats.ox.ac.uk
Tue Sep 7 10:16:51 CEST 2004


On Sat, 4 Sep 2004 tlumley at u.washington.edu wrote:
 
> I have made the 3-d case do the same as the vector case, which is what the
> C code clearly intended (a goto label was in the wrong place).
> 
> This leaves the bigger question of the right thing to do. I note that data
> frames give an error when any indices are NA.

One case is unambiguous and common:

	x[ind] <- val

where `val' is of length one.  I've written code to ban all other 
subassignments involving NAs.  Once I fixed occurrences in R itself 
(notably in ifelse), only three problems remain in tests over the CRAN 
packages

< Running examples in ape-Ex.R failed.
< > ### * popsize
    area[a == 0] <- stepfunction[a == 0]

< Running examples in RandomFields-Ex.R failed.
< > ### * ShowModels
expr[pmatch(covlist, namen)] <- exprlist

< Running examples in sm-Ex.R failed.
< > ### * sm.sphere
    z[xyzok < 0] <- (za - zb)[xyzok < 0]

The first and third are a typical usage, where R makes more sense than S.
[Worryingly, sm was written for S-PLUS and would seem to be incorrect 
there.]

So in R 2.0.0 we will have

\section{NAs in indexing}{
  When subscripting, a numerical, logical or character \code{NA} picks
  an unknown element and so returns \code{NA} in the corresponding
  element of a logical, integer, numeric, complex or character result,
  and \code{NULL} for a list.

  When replacing (that is using subscripting on the lhs of an
  assignment) \code{NA} does not select any element to be replaced.  As
  there is ambiguity as to whether an element of the rhs should
  be used or not (and \R handled this inconsistently prior to \R 2.0.0),
  this is only allowed if the rhs value is of length one (so the two
  interpretations would have the same outcome).  
}

-- 
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



More information about the R-devel mailing list