矩阵列表

时间:2015-03-01 17:09:05

标签: r plyr do.call

我正在尝试操作一个R列表,这些列表本身包含矩阵。我想要做的是与question类似,其中使用来自do.call(rbind, l)的{​​{1}}或rbind.fill.matrix(l)函数将矩阵列表l组合成单个矩阵。但是,我希望在顶级列表的不同元素中组合矩阵,同时保留较低级别的分组,最后得到一个矩阵列表,其中单独的元素对应于较低级别列表的分组。

作为一个例子,考虑从三个较低级别列表构建的顶级列表顶部列表:

plyr

其中矩阵都具有相同的列数但可能具有不同的行数。最后,我想要一个具有以下结构的新列表newtoplist

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)

一般可以这样做吗?

2 个答案:

答案 0 :(得分:0)

newtoplist<-mapply(rbind,lowerlist1,lowerlist2,lowerlist3)

答案 1 :(得分:0)

如果您无法使用@Metrics的mapply答案(当您有太多lowerlist项要写出来时),这样的事情可能有用。为了便于阅读,我使用了magrittr管道。

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))