我正在尝试操作一个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)
一般可以这样做吗?
答案 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))