2016-12-25 204 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