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@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.

______________________________________________
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