合并 N 个列表中的 i:th 矩阵

combine the i:th matrix from N lists

我想合并存储在多个列表中的大型矩形矩阵。例如。 rbind.fill.matrix {plyr} 所有 N 列表中的 i:th 矩阵。每个列表中的矩阵数量 nN 个列表中是相等的。

#Dummy data using N=2, n=2

 # binary matrices
 ls1 <- replicate(n=2, list(matrix(rbinom(1,0.5,n=20), nrow=2)))
 ls2 <- replicate(n=2, list(matrix(rbinom(1,0.5,n=12), nrow=2)))

 ls1 <- lapply(ls1, "colnames<-", head(LETTERS,ncol(ls1[[1]])))
 ls1 <- lapply(ls1, "rownames<-", 1:2)

 # create some overlap
 ls2 <- lapply(ls2, "colnames<-", c("A","E",tail(LETTERS,ncol(ls2[[1]])-2)))
 ls2 <- lapply(ls2, "rownames<-", 1:2)

对于所有 N 个列表和 n 个矩阵,结果将类似于 rbind.fill.matrix(ls1[[1]], ls2[[1]])

我试过类似这样的方法,显然不行。它所做的是将每个列表中的每个矩阵组合起来。

lsNames <- c("ls1", "ls2")

sapply( lsNames, function(x) do.call(rbind.fill.matrix, get(x)))

非常感谢任何指点,谢谢!

如果 ls1 和 ls2 的长度相等:

lapply( seq_along(ls1), function(i) {
  rbind.fill.matrix(ls1[[i]], ls2[[i]])
} )

结果:

# [[1]]
#      A  B  C  D E  F  G  H  I  J  W  X  Y  Z
# [1,] 0  1  1  0 0  0  0  1  1  0 NA NA NA NA
# [2,] 0  1  1  0 0  1  1  0  0  0 NA NA NA NA
# [3,] 0 NA NA NA 0 NA NA NA NA NA  0  0  1  1
# [4,] 0 NA NA NA 0 NA NA NA NA NA  1  1  1  0
# 
# [[2]]
#      A  B  C  D E  F  G  H  I  J  W  X  Y  Z
# [1,] 1  1  1  0 1  1  0  1  1  1 NA NA NA NA
# [2,] 1  1  1  0 0  0  0  1  1  0 NA NA NA NA
# [3,] 0 NA NA NA 0 NA NA NA NA NA  1  0  0  1
# [4,] 0 NA NA NA 0 NA NA NA NA NA  0  1  1  1

对于多个列表

# create list of lists:
list_of_lists <- list(ls1, ls2)

lapply( seq_along(list_of_lists[[1]]), function(i) {
  arg_lists <- lapply(list_of_lists, function(l) l[[i]])  
  rbind.fill.matrix(arg_lists)
} )