R 矩阵列表

R 矩阵列表,r,plyr,do.call,R,Plyr,Do.call,我试图操纵一个R列表,它本身包含矩阵。我想做的与此类似,使用do.callrbind,l或plyr中的rbind.fill.matrixl函数将矩阵列表l组合成一个矩阵。但是,我希望将顶级列表中不同元素的矩阵组合起来,同时保留较低级别的分组,最终得到一个矩阵列表,其中单独的元素对应于较低级别列表的分组 作为一个例子,考虑从三个下级列表构造的顶级列表toPLIST: lowerlist1 = list(matrix1_1, matrix1_2, matrix1_3, matrix1_4) lowe

我试图操纵一个R列表,它本身包含矩阵。我想做的与此类似,使用do.callrbind,l或plyr中的rbind.fill.matrixl函数将矩阵列表l组合成一个矩阵。但是,我希望将顶级列表中不同元素的矩阵组合起来,同时保留较低级别的分组,最终得到一个矩阵列表,其中单独的元素对应于较低级别列表的分组

作为一个例子,考虑从三个下级列表构造的顶级列表toPLIST:

lowerlist1 = list(matrix1_1, matrix1_2, matrix1_3, matrix1_4)
lowerlist2 = list(matrix2_1, matrix2_2, matrix2_3, matrix2_4)
lowerlist3 = list(matrix3_1, matrix3_2, matrix3_3, matrix3_4)
toplist = list(lowerlist1, lowerlist2, lowerlist3)
其中所有矩阵的列数相同,但行数可能不同。最后,我想要一个新的列表,结构如下

newmatrix1 = rbind(matrix1_1, matrix2_1, matrix3_1)
newmatrix2 = rbind(matrix1_2, matrix2_2, matrix3_2)
newmatrix3 = rbind(matrix1_3, matrix2_3, matrix3_3)
newmatrix4 = rbind(matrix1_4, matrix2_4, matrix3_4)
newtoplist = list(newmatrix1, newmatrix2, newmatrix3, newmatrix4)
因此,一个完整的例子是:

matrix1_1 = matrix(1.1, 4, 5)
matrix1_2 = matrix(1.2, 3, 5)
matrix1_3 = matrix(1.3, 2, 5)
matrix1_4 = matrix(1.4, 3, 5)
matrix2_1 = matrix(2.1, 2, 5)
matrix2_2 = matrix(2.2, 4, 5)
matrix2_3 = matrix(2.3, 5, 5)
matrix2_4 = matrix(2.4, 2, 5)
matrix3_1 = matrix(3.1, 2, 5)
matrix3_2 = matrix(3.2, 4, 5)
matrix3_3 = matrix(3.3, 5, 5)
matrix3_4 = matrix(3.4, 2, 5)

lowerlist1 = list(matrix1_1, matrix1_2, matrix1_3, matrix1_4)
lowerlist2 = list(matrix2_1, matrix2_2, matrix2_3, matrix2_4)
lowerlist3 = list(matrix3_1, matrix3_2, matrix3_3, matrix3_4)
toplist = list(lowerlist1, lowerlist2, lowerlist3)

newmatrix1 = rbind(matrix1_1, matrix2_1, matrix3_1)
newmatrix2 = rbind(matrix1_2, matrix2_2, matrix3_2)
newmatrix3 = rbind(matrix1_3, matrix2_3, matrix3_3)
newmatrix4 = rbind(matrix1_4, matrix2_4, matrix3_4)
newtoplist = list(newmatrix1, newmatrix2, newmatrix3, newmatrix4)
一般情况下可以这样做吗?

如果在需要写出太多最下面的项目时无法使用@Metrics的mapply答案,那么类似的方法可能会奏效。为了便于阅读,我使用了magrittr管道

newtoplist<-mapply(rbind,lowerlist1,lowerlist2,lowerlist3)
n <- length(toplist)
k <- sapply(toplist, length)[1] #assuming that each sublist contains the same number of matrices
num <- seq(1, n*k, by = n)
unlist(toplist, recursive = F) %>% 
    split(., num) %>% 
    lapply(., function(x) do.call(rbind,x))

lapplyl,functionx do.callrbind,xSorry Khashaa,我想从顶级列表而不是低级列表中加入矩阵。所有相同维度的矩阵?您应该提供可复制的ex。所有矩阵都有相同的列数,但在我的特定应用程序中,它们可能有不同的行数。这似乎可以做到这一点。对于我的应用程序,toplist中的列表条目数量可能会有所不同,而不是我上面的固定数量。谢谢。虽然在我的实际应用程序中,我有不同数量的toplist条目,不能硬编码。你的意思是lowerlist的数量很大。不一定很大-它实际上对应于我使用并行包运行函数的处理器核数。我可以考虑添加一个解释,说明为什么这是一个好的解决方案。一行代码看起来像是一个低质量的答案,并进入了低质量帖子的审查队列。