Как объединить матрицы в списках списка в R? - PullRequest
1 голос
/ 06 октября 2019

Я пытаюсь объединить матрицы с одинаковыми именами в списках списка. Для простоты я использую список с двумя списками в качестве примера.

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

Спасибо!

Ответы [ 2 ]

5 голосов
/ 06 октября 2019

Используйте 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
0 голосов
/ 07 октября 2019

Вот вариант с 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...