use*_*283 2 loops r list matrix
我有几个矩阵,让我们简单说,我有3个矩阵.我想创建一个列表然后使用rbind将一个放在另一个上面.如果我手工完成,使用以下代码,它可以工作:
list<-list(matrix1,matrix2,matrix3)
test<-do.call("rbind",list)
Run Code Online (Sandbox Code Playgroud)
我得到一个97947行4列的矩阵,这就是我想要的.但如果我做一个循环,它不起作用:
list2<-list()
for (i in 1:3)
{
y<-paste0("matrix",x)
list2[[x]] <- y
}
test2<-do.call("rbind",list2)
Run Code Online (Sandbox Code Playgroud)
我得到一个3x1字符矩阵??? 有人可以指点我错误吗?任何评论将不胜感激.谢谢!!!!
Sim*_*lon 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
Run Code Online (Sandbox Code Playgroud)