Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建一个带有循环的矩阵列表,并在R中合并它们_R_List_Loops_Matrix - Fatal编程技术网

创建一个带有循环的矩阵列表,并在R中合并它们

创建一个带有循环的矩阵列表,并在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

我有几个矩阵,让我们简单地说,我有3个矩阵。我想创建一个它们的列表,然后使用rbind将一个放在另一个上面。 如果我用以下代码手工操作,它会工作:

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