[英]How to combine matrices in lists of a list in R?
我正在嘗試將具有相同名稱的矩陣組合在列表列表中。 為簡單起見,我以一個包含兩個列表的列表為例。
A = matrix(c(1,2,3,4),2)
B = matrix(c(1,2,3,4,5,6),2)
list1 = list(A=A,B=B)
A = matrix(c(1,2,2,1,1,1),3)
B = matrix(c(1,2,3,3,2,2,1,1,1),3)
list2 = list(A=A,B=B)
mylist=list(list1,list2)
mylist
[[1]]
[[1]]$A
[,1] [,2]
[1,] 1 3
[2,] 2 4
[[1]]$B
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
[[2]]
[[2]]$A
[,1] [,2]
[1,] 1 1
[2,] 2 1
[3,] 2 1
[[2]]$B
[,1] [,2] [,3]
[1,] 1 3 1
[2,] 2 2 1
[3,] 3 2 1
我希望按行組合所有 A 矩陣並按行組合所有 B 矩陣。 請注意,實際上我有一堆列表,例如 list1 和 list2,因此我更喜歡為此使用一些循環樣式操作。
我試圖簡單地合並所有列表(即示例中的 list1 和 list2),但我仍然無法合並單獨的列表。
> do.call(c, mylist)
$A
[,1] [,2]
[1,] 1 3
[2,] 2 4
$B
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
$A
[,1] [,2]
[1,] 1 1
[2,] 2 1
[3,] 2 1
$B
[,1] [,2] [,3]
[1,] 1 3 1
[2,] 2 2 1
[3,] 3 2 1
謝謝!
像這樣將mapply
與rbind
一起使用:
do.call(mapply, c("rbind", mylist))
給予:
$A
[,1] [,2]
[1,] 1 3
[2,] 2 4
[3,] 1 1
[4,] 2 1
[5,] 2 1
$B
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
[3,] 1 3 1
[4,] 2 2 1
[5,] 3 2 1
這是tidyverse
的一個選項
library(purrr)
library(dplyr)
mylist %>%
transpose %>%
map(reduce, rbind)
#$A
# [,1] [,2]
#[1,] 1 3
#[2,] 2 4
#[3,] 1 1
#[4,] 2 1
#[5,] 2 1
#$B
# [,1] [,2] [,3]
#[1,] 1 3 5
#[2,] 2 4 6
#[3,] 1 3 1
#[4,] 2 2 1
#[5,] 3 2 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.