[R] Change in behaviour of sd()

Jim Lemon jim at bitwrit.com.au
Wed Jul 9 11:43:51 CEST 2008


On Tue, 2008-07-08 at 17:38 +1000, Fiona Johnson wrote:
> Hi
> 
> I have just upgraded from R2.6.0 to R2.7.1 (running on Windows) and a part
> of my code that previously ran ok now gives an error. The following is a
> simple example to demonstrate my problem.
> 
> > a <- array(c(1,2,3,4,5,6,rep(NA,6)),dim=c(6,2))
> > apply(a,2,sd,na.rm=T)
> 
> In R2.6.0 this gives (which is what I would like)
> 
>  [1] 1.870829       NA
> 
> In R2.7.1 it gives the following error
> 
> "Error in var(x, na.rm = na.rm) : no complete element pairs"
> 
> As my columns are always either all NA or all numbers, I could get around it
> by replacing the NA's with 0's but if someone could shed some light on why
> the behaviour has changed in the new version or a better work around it
> would be much appreciated. I want to keep the columns of NA's because
> ultimately I am plotting the results with contour and the NA's refer to grid
> cells not on land where I don't want to have contours.
> 
Hi Fiona,
I get the same behavior on Linux. You can get around it like this:

mysd<-function(x,...) if(!all(is.na(x))) sd(x,...)
apply(sd,2,mysd,)

While I haven't looked at the changes for 2.7.1 on this, I think is it
probably to avoid a problem with trying to calculate the covariance of a
NULL object. If I remember, I'll test it tomorrow at work where I have
access to Windows and email you again.

Jim



More information about the R-help mailing list