我有一个矩阵列表,类似于下面代码获得的矩阵:
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]])
诀窍是我事先并不知道需要加入多少个矩阵。有没有一种很好的方法来编写将所有矩阵堆叠在列表中的代码?
答案 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.frame
和dplyr
的矩阵(不是data.table
s - 工作正常)没有相同的行和列顺序时, bind会将值叠加在彼此不相关的值上。
如果您想检查并考虑每个维度中的名称,请查看narray
:
(免责声明:我写了包裹)