3

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

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

5 回答 5

5

经典do.call

     do.call(rbind,d)

data.table使用包的另一种选择:

library(data.table)
rbindlist(lapply(d,as.data.frame))
于 2013-09-27T21:27:17.053 回答
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
于 2013-09-27T21:30:27.900 回答
2

两种可能的解决方案。一、使用基础包

e <- do.call(rbind, d)

将加入矩阵列表。

二、使用包abind

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

如果您有数据框而不是矩阵,data.table::rbindlist(d)则比do.call(rbind, d).

于 2013-09-27T21:28:31.327 回答
2

我的最爱...

Reduce(rbind, d)
于 2016-04-28T04:49:26.733 回答
1

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

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

在此处输入图像描述

(免责声明:我写了这个包)

于 2017-01-08T22:45:41.730 回答