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 回答