簡體   English   中英

如何在 R 的列表中組合矩陣?

[英]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

謝謝!

像這樣將mapplyrbind一起使用:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM