[R] do.call() and aperm()

Thomas Lumley tlumley at u.washington.edu
Tue Oct 21 23:03:52 CEST 2003


On Tue, 21 Oct 2003, Robin Hankin wrote:

> Hi everyone
>
> I've been playing with do.call() but I'm having problems understanding it.
>
> I have a list of "n" elements, each one of which is "d" dimensional
> [actually an n-by-n-by ... by-n array].  Neither n nor d is known in
> advance.  I want to bind the elements together in a higher-dimensional
> array.
>
> Toy example follows with d=n=3.
>
> f <- function(n){array(n,c(3,3,3))}
> x <-  sapply(1:3,f,simplify=FALSE)
>
> Then what I want is
>
> ans <- abind(x[[1]] , x[[2]] , x[[3]]  , along=4)
>
> [abind() is defined in library(abind)].
>
> Note that dim(ans) is c(3,3,3,3), as required.
>
> PROBLEM: how do I do tell do.call() that I want to give abind() the
> extra argument along=4 (in general, I want
> along=length(dim(x[[1]]))+1)?
>
>
> Oblig Attempt:
>
> jj <- function(...){abind(... , along=4)}
> do.call("jj" , x)
>
> This works, because I know that d=3 (and therefore use along=4), but
> it doesn't generalize easily to arbitrary d.  I'm clearly missing
> something basic.  Anyone?
>

If I have understood correctly, then
  d<-length(dim(x[[1]]))
  do.call("abind",c(x,along=d+1))
should work.


	-thomas




More information about the R-help mailing list