如何在R中堆叠多个矩阵

时间:2013-09-27 21:24:03

标签: r matrix

我有一个矩阵列表,类似于下面代码获得的矩阵:

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]])

诀窍是我事先并不知道需要加入多少个矩阵。有没有一种很好的方法来编写将所有矩阵堆叠在列表中的代码?

5 个答案:

答案 0 :(得分:5)

经典do.call

     do.call(rbind,d)

使用data.table包的另一个选项:

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

答案 1 :(得分: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

答案 2 :(得分:2)

两种可能的解决方案。首先,使用基础包

e <- do.call(rbind, d)

将加入矩阵列表。

其次,使用包abind

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

如果你有数据框而不是矩阵,data.table::rbindlist(d)do.call(rbind, d)更快。

答案 3 :(得分:2)

我最喜欢的......

(IATask<IAFloorPlan>) mResourceManager.FetchFloorPlanWithId(id)

答案 4 :(得分:0)

到目前为止,所有解决方案的问题在于,当此data.framedplyr的矩阵(不是data.table s - 工作正常)没有相同的行和列顺序时, bind会将值叠加在彼此不相关的值上。

如果您想检查并考虑每个维度中的名称,请查看narray

enter image description here

(免责声明:我写了包裹)