创建一个带有循环的矩阵列表,并在R中合并它们
我有几个矩阵,让我们简单地说,我有3个矩阵。我想创建一个它们的列表,然后使用rbind将一个放在另一个上面。 如果我用以下代码手工操作,它会工作:创建一个带有循环的矩阵列表,并在R中合并它们,r,list,loops,matrix,R,List,Loops,Matrix,我有几个矩阵,让我们简单地说,我有3个矩阵。我想创建一个它们的列表,然后使用rbind将一个放在另一个上面。 如果我用以下代码手工操作,它会工作: list<-list(matrix1,matrix2,matrix3) test<-do.call("rbind",list) list考虑使用类似于mget的函数从globalenvironment(默认环境)获取所有矩阵对象,并将它们放入列表中。然后可以使用do.call方法避免循环。以下是一个玩具示例: # Some data
list<-list(matrix1,matrix2,matrix3)
test<-do.call("rbind",list)
list考虑使用类似于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
#一些数据
m1我知道这似乎是一个恼人的评论,但第一种方法有什么问题?!效率要高得多。我感觉你可能有很多矩阵,首先需要一种自动的方法将它们放入列表中。试试list@SimonO101我猜我不是唯一一个没有测试我的代码的人@迈克博士,你完全正确。对不起,这里不需要模式匹配。如果你有一套矩阵的顺序名称,你只需要做更简单的列表就行了,非常感谢!你说得对,使用mget容易多了,非常感谢@很高兴我能帮上忙。由于您是新来的,您可能希望阅读网站的和部分,以帮助您充分利用它。如果一个答案确实解决了你的问题,你可能想要考虑一下投票和/或标记它被接受来显示问题已经被答案,通过在适当的答案旁边划上绿色的小复选标记。您没有义务这样做,但这有助于保持网站没有未回答的问题,并奖励那些花时间解决您问题的人。@SimonO'Hanlon-我运行“列表”时看到一条错误消息
# 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