Dear R community, is there any efficient way to use aaply on different datacubes? I have 3 dimesniolan datacubes/arrays with dimensions lon x lat x time. Now I would like to do caclulations on each individual time series (e.g. all vectors along the third dimension) using a time series (or more) in the same location on another (identically shaped) array. What would be the most efficient way to do this? Is there any multivariate version of aaply? Or other functions? Or some memory efficient and fast way (the datacubes are huge!) to do this by hand? Thanks a lot Jannis
multivariate way to aaply on different arrays
2 messages · Jannis
4 days later
Hi R gurus,
just in case anybody else has a similar problem ... I have programmed a
function that solves this problem by creating a higher dimensional array
out of the individual variables. I have no idea though whether this is
very efficient. Feel welcome to comment in case you think that there are
more efficient ways to solve this.
Best
Jannis
maaply <- structure(function(
##title<< multivariate version of aaply
##description<< apply a function to slices, vectors in different
(multivariate)
## multidimensional datacubes.
... ##<< arrays: input arrays
, margins ##<< margins/dimensions along which to split the arrays
(see help of apply).
, fun ##<< function to apply to each cutout from the arrays.
(see help of apply)
## Has to have only ... as an input.
, parallel = TRUE ##<< logical: whether to parallelize the
calculation (see help of aaply)
)
##seealso<<
##\code{\link{apply}}, \code{\link{aaply}}
{
require(abind)
require(plyr)
data <- abind(..., along =.5)
fun.internal <- function(data) {
results <- do.call(fun, alply(data, 1, function(x)return(x)))
return(results)
}
return(aaply(.data = data, .margins = c(margins + 1), .fun =
fun.internal, .parallel = parallel))
}, ex = function(){
#example datacubes
data1 <- aperm((array(rep(1:100, each = 10), dim = c(10,10,10))),
c(2,3,1))
data2 <- array(rep(2, 10^3), c(10,10,10))
data3 <- data1
#example function
fun = function(...) {
dummy <- list(...)
return(sum(dummy[[1]]) / mean(dummy[[2]]) + mean(dummy[[3]]))
}
#call to function
results <- maaply(data1,data2,data3, margins = c(1,2), fun = fun)
})
On 18.10.2012 17:13, Jannis wrote:
Dear R community, is there any efficient way to use aaply on different datacubes? I have 3 dimesniolan datacubes/arrays with dimensions lon x lat x time. Now I would like to do caclulations on each individual time series (e.g. all vectors along the third dimension) using a time series (or more) in the same location on another (identically shaped) array. What would be the most efficient way to do this? Is there any multivariate version of aaply? Or other functions? Or some memory efficient and fast way (the datacubes are huge!) to do this by hand? Thanks a lot Jannis
______________________________________________ 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.