Dear help, suppose I have this array and want to compute sd aross rows and
columns.

p <- array(c(1:5, rep(NA, times = 3)), dim = c(5, 5, 3))

apply(p, 1:2, sd) fails because sd requires at least 2 numbers to compute sd

apply(p, 1:2, sd, na.rm = TRUE) fails for the same reason

I crafted my own function that does what I want

sd_fun <- function(i){
if(sum(!is.na(i))==0){
temp.sd <- NA
}else{
temp.sd <- sd(i, na.rm = TRUE)
}
return(temp.sd)
}


apply(p, 1:2, sd_fun)

This does what I want, but when I scale up to large arrays like

pp <- array(c(1:5, rep(NA, times = 3)), dim = c(1000, 1000, 60))

the apply function takes a long time to run.

Is there a faster, more efficient way to do this?

Thanks in advance

Matt


-- 
Matthew J. Oliver
Assistant Professor
College of Marine and Earth Studies
University of Delaware
700 Pilottown Rd.
Lewes, DE, 19958
302-645-4079
http://www.ocean.udel.edu/people/profile.aspx?moliver

        [[alternative HTML version deleted]]

______________________________________________
R-help@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.

Reply via email to