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)

次のように、1 つのマトリックスになるようにそれらをスタックします。

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

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 に答える