2013-02-13 68 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