From: Rolf Turner <r.turner_at_auckland.ac.nz>

Date: Wed, 09 Jul 2008 09:01:42 +1200

}

R-help_at_r-project.org mailing list

https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code. Received on Tue 08 Jul 2008 - 21:13:42 GMT

Date: Wed, 09 Jul 2008 09:01:42 +1200

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

R-help_at_r-project.org mailing list

https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code. Received on Tue 08 Jul 2008 - 21:13:42 GMT

Archive maintained by Robert King, hosted by
the discipline of
statistics at the
University of Newcastle,
Australia.

Archive generated by hypermail 2.2.0, at Tue 08 Jul 2008 - 22:31:28 GMT.

*
Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help.
Please read the posting
guide before posting to the list.
*