2016-12-25 205 views
4

我有一个list矩阵的list。每个list具有相同数量的matrices其中每个matrix具有相同的列数:矩阵列表中的列表矩阵

set.seed(1) 

mat.lol <- list(list1=list(matrix(rnorm(100),ncol=10),matrix(rnorm(200),ncol=10),matrix(rnorm(140),ncol=10)), 
       list2=list(matrix(rnorm(80),ncol=10),matrix(rnorm(220),ncol=10),matrix(rnorm(110),ncol=10)), 
       list3=list(matrix(rnorm(300),ncol=10),matrix(rnorm(500),ncol=10),matrix(rnorm(650),ncol=10))) 

而且我想rbind每个matrixi所有列表,这样我结束了matrices这个list

mat.list <- list(rbind(mat.lol[[1]][[1]],mat.lol[[2]][[1]],mat.lol[[3]][[1]]), 
       rbind(mat.lol[[1]][[2]],mat.lol[[2]][[2]],mat.lol[[3]][[2]]), 
       rbind(mat.lol[[1]][[3]],mat.lol[[2]][[3]],mat.lol[[3]][[3]])) 

什么是applyfunction达到那个目标?

+0

'lapply(mat.lol,函数(x)的降低(rbind,X))'。 –

回答

4

可以使用transpose()功能从purrr内打开列表出来使每个子列表包含了所有你想要绑定在一起的矩阵,然后你就可以简单的通过结果列表和rbind矩阵循环:

library(purrr) 
mat.list.1 <- lapply(transpose(mat.lol), do.call, what=rbind) 

identical(mat.list, mat.list.1) 
# [1] TRUE 

坚持purrr语法:

mat.list.3 <- transpose(mat.lol) %>% map(do.call, what=rbind) 

identical(mat.list, mat.list.3) 
# [1] TRUE 

或者可以使用从Map基R:

mat.list.2 <- do.call(Map, c(f = rbind, mat.lol)) 

identical(mat.list, mat.list.2) 
# [1] TRUE