On Sat, 9 Jul 2016, Debasish Pai Mazumder wrote:
I have 4-dimension array x(lat,lon,time,var)
I am using "apply" to calculate over time
new = apply(x,c(1,2,4),FUN=function(y) {length(which(y>=70))})
This is very slow. Is there anyway make it faster?
If dim(x)[3] << prod(dim(x)[-3]),
new <- Reduce("+",lapply(1:dim(x)[3],function(z) x[,,z,]>=70))
will be faster.
However, if you can follow Peter Langfelder's suggestion to use rowSums,
that would be best. Even using rowSums(aperm(x,c(1,2,4,3)>=70,dims=3) and
paying the price of aperm() might be better.
Chuck
______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
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.