Hi Jorge, this does not seem to return the same thing as

p <- array(c(1:5, rep(NA, times = 3)), dim = c(5, 5, 3))
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)

Am I missing something basic here?


On Wed, Feb 25, 2009 at 11:47 AM, Jorge Ivan Velez <jorgeivanvelez@gmail.com
> wrote:

>
> Hi Mark,
> There is a typo in the first way. My apologies. It should be:
> # First
> res<-apply(p,3,function(X)
>        c(scols=apply(X,2,sd,na.rm=TRUE),srows=apply(X,1,sd,na.rm=TRUE))
>        )
> res
>
> HTH,
>
> Jorge
>
>
> On Wed, Feb 25, 2009 at 11:42 AM, Jorge Ivan Velez <
> jorgeivanvelez@gmail.com> wrote:
>
>>
>> Dear Matt,
>>
>> Here are two ways:
>>
>> # Data
>> p <- array(c(1:5, rep(NA, times = 3)), dim = c(5, 5, 3))
>>
>> # First
>> res<-apply(p,3,function(X)
>>        c(scols=apply(X,2,sd,na.rm=TRUE),srows=apply(X,2,sd,na.rm=TRUE))
>>        )
>> res
>>
>> # Second
>> res2<-apply(p,3,function(X)
>>        list(scols=apply(X,2,sd,na.rm=TRUE),srows=apply(X,1,sd,na.rm=TRUE))
>>        )
>>
>> lapply(res2,function(x) do.call(rbind,x))
>>
>> HTH,
>>
>> Jorge
>>
>>
>> On Wed, Feb 25, 2009 at 10:53 AM, Matt Oliver <moliver@udel.edu> wrote:
>>
>>> 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.
>>>
>>
>>
>


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


