2013-02-13 69 views
3

我有一系列的lapply调用,给我留下了一个数组列表。第一个维度的数量不同,其中两个维度相同。我想把每个'行'(第一个维度)放在彼此的顶部,就像rbind对于2d阵列(矩阵)一样。堆栈数组切片(rbind> 2维)

的数据是这样的:

la <- list(array(dim=c(1,6,7)), array(dim=c(2,6,7)), array(dim=c(3,6,7))) 

我不能使用do.call(rbind, la),因为它只是把它展平的矩阵。

我可以写这样的:

rbind.array <- function(..., deparse.level=1) { 
    allargs <- list(...) 
    n <- length(allargs) 
    dims <- sapply(la,dim) 
    sel.dim <- which(!apply(dims, 1, function(x) length(unique(x))==1)) 
    stopifnot(length(sel.dim)==1) 
    target.length <- apply(dims, 1, sum)[sel.dim] 
    target.dims <- dims[,1] 
    target.dims[sel.dim] <- target.length 
    res <- array(dim=target.dims) 
    for(i in seq(n)) { 
     # stack array slices one by one 
    } 
} 

但可以肯定这样的功能已经存在?

回答

3

我觉得abindabind这是...吗?

library(abind) 
abind(la[[1]],la[[2]],la[[3]],along = 1) 

除了Curry的解决方案,这似乎工作,以及:

do.call("abind",list(la,along = 1)) 
+0

它做,谢谢!我用'do.call(库里(abind,along = 1),la)'来避免输入每一个。 – 2013-02-13 15:54:03