2

私はいくつかの行列を持っています。簡単にして、3 つの行列があるとしましょう。それらのリストを作成し、rbind を使用して一方を他方の上に置きたいと考えています。次のコードを使用して手動で行うと、機能します。

list<-list(matrix1,matrix2,matrix3)
test<-do.call("rbind",list)

そして、私が望むものである97947行×4列の行列を取得します。しかし、ループを実行すると機能しません:

list2<-list()
for (i in 1:3)
{
y<-paste0("matrix",x)
list2[[x]] <- y
}
test2<-do.call("rbind",list2)

そして、3x1の文字マトリックスを取得します??? 誰かが私にエラーを指摘してもらえますか? どんなコメントでも大歓迎です。ありがとうございました!!!!

4

1 に答える 1

10

(デフォルト環境)からすべての行列オブジェクトmget取得し、それらをリストに入れるような関数を使用することを検討してください。globalenvironmentその後、メソッドを使用do.callしてループを回避できます。おもちゃの例を次に示します。

#  Some data
m1 <- matrix( 1:4 , 2 , byrow = TRUE )
m2 <- matrix( 1:4 , 2 , byrow = TRUE )
m3 <- matrix( 1:4 , 2 , byrow = TRUE )

#  Use mget to put them in a list. mget searches the .GlobalEnvironment (by default) for the object names in it's first argument
list <- mget( paste0( "m" , 1:3 ) )
list
#$m1
#     [,1] [,2]
#[1,]    1    2
#[2,]    3    4

#$m2
#     [,1] [,2]
#[1,]    1    2
#[2,]    3    4

#$m3
#     [,1] [,2]
#[1,]    1    2
#[2,]    3    4

#  rbind them
do.call( rbind , list )
#     [,1] [,2]
#[1,]    1    2
#[2,]    3    4
#[3,]    1    2
#[4,]    3    4
#[5,]    1    2
#[6,]    3    4
于 2013-10-28T19:13:41.150 に答える