[R] Change in behaviour of sd()

Rolf Turner r.turner at auckland.ac.nz
Tue Jul 8 23:01:42 CEST 2008


On 8/07/2008, at 7:38 PM, 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.

I just scanned through the release announcements (from Peter  
Dalgaard) about new
versions of R (R home page --> What's new? --> Archive of important  
announcements)
and found nothing about new behaviour for sd/var/cov.  So I cannot  
contribute
to enlightenment about ``why''.  The following function might provide  
a suitable
workaround:

my.sd <- function (x, na.rm = FALSE)
{
     if (is.matrix(x))
         apply(x, 2, my.sd, na.rm = na.rm)
     else if (is.vector(x)) {
         if(na.rm) x <- x[!is.na(x)]
         if(length(x) == 0) return(NA)
         sqrt(var(x, na.rm = na.rm))
     }
     else if (is.data.frame(x))
         sapply(x, my.sd, na.rm = na.rm)
     else {
         x <- as.vector(x)
         my.sd(x,na.rm=na.rm)
     }
}

It seems to work on your toy example at least.  Note that my.sd 
(numeric(0)) returns NA,
but my.sd(NULL) throws an error.

	cheers,

		Rolf Turner


######################################################################
Attention:\ This e-mail message is privileged and confid...{{dropped:9}}



More information about the R-help mailing list