2013-09-27 30 views
4

我有矩陣的列表,類似於由下面的代碼所獲得的一個:如何堆疊多個矩陣中的R

a <- matrix(1, ncol=2, nrow=3) 
b <- matrix(2, ncol=2, nrow=3) 
c <- matrix(3, ncol=2, nrow=3) 
d <- list(a, b, c) 

欲堆疊起來,使得它們在一個矩陣中,類似於這個一個:

e <- rbind(d[[1]], d[[2]], d[[3]]) 

訣竅是我不知道需要加入多少個矩陣。有沒有一種很好的方法來編寫將所有矩陣堆疊在列表中的代碼?

回答

4

經典do.call

 do.call(rbind,d) 

使用data.table包的另一種選擇:

library(data.table) 
rbindlist(lapply(d,as.data.frame)) 
+0

後者的方式是非常慢。如果你真的想要一個data.table,先用矩陣進行綁定然後轉換。 – Frank

2

兩個可能的解決方案。首先,使用基礎包

e <- do.call(rbind, d) 

將加入矩陣列表。

其次,使用包abind

library(abind) 
e <- abind(d, along=1) 

如果你有數據幀,而不是矩陣,data.table::rbindlist(d)do.call(rbind, d)更快的選擇。

3
library(plyr) 
ldply(d) 
    1 2 
1 1 1 
2 1 1 
3 1 1 
4 2 2 
5 2 2 
6 2 2 
7 3 3 
8 3 3 
9 3 3 
1

我最喜歡的......

Reduce(rbind, d) 
0

所有解決方案的問題,到目前爲止是當矩陣(不data.frame秒 - 這個dplyrdata.table做工精細)不具有相同的順序行和列,綁定將堆疊彼此不相關的值。

如果您要檢查,並考慮到在每個維度的名字,看看narray

enter image description here

(免責聲明:我寫的包)