按元素名称重新组织嵌套列表:所有具有相同名称的元素放在一起

reorganize nested lists by element names: all elements with the same name together

我想重组 dlist4 的大列表,使所有 a 都留在一个嵌套列表中,而所有 b 都在另一个嵌套列表中列表。

A = list(a = matrix(1:4, 2), b = matrix(2:5, 2))

G = list(a = matrix(10:13, 2), b = matrix(5:8, 2))

M_1 = list(a = matrix(10:13, 2), b = matrix(5:8, 2))

M_2 = list(a = matrix(2:5, 2), b = matrix(5:8, 2))

dlist4 <- tibble::lst(A, G, M_1, M_2)

这些问题的答案: and combine elements of list of lists with the same name 让我很接近。我需要列表结构来删除 unlist(),但结果出乎意料。

tapply(dlist4,names(dlist4), FUN=function(x) unname(x))
$A
$A$a
     [,1] [,2]
[1,]    1    3
[2,]    2    4

$A$b
     [,1] [,2]
[1,]    2    4
[2,]    3    5


$G
$G$a
     [,1] [,2]
[1,]   10   12
[2,]   11   13

$G$b
     [,1] [,2]
[1,]    5    7
[2,]    6    8


$M_1
$M_1$a
     [,1] [,2]
[1,]   10   12
[2,]   11   13

$M_1$b
     [,1] [,2]
[1,]    5    7
[2,]    6    8


$M_2
$M_2$a
     [,1] [,2]
[1,]    2    4
[2,]    3    5

$M_2$b
     [,1] [,2]
[1,]    5    7
[2,]    6    8

我需要一个 a 的列表,其中包含四个元素,a$Aa$Ga$M_1a$M_2,并且与b 列表;然后 ab 嵌套在一个更大的列表中。非常感谢任何提示。

do.call(rlist::list.zip, dlist4)

purrr::lift(rlist::list.zip)(dlist4)

?

$a
$a$A
     [,1] [,2]
[1,]    1    3
[2,]    2    4

$a$G
     [,1] [,2]
[1,]   10   12
[2,]   11   13

$a$M_1
     [,1] [,2]
[1,]   10   12
[2,]   11   13

$a$M_2
     [,1] [,2]
[1,]    2    4
[2,]    3    5


$b
$b$A
     [,1] [,2]
[1,]    2    4
[2,]    3    5

$b$G
     [,1] [,2]
[1,]    5    7
[2,]    6    8

$b$M_1
     [,1] [,2]
[1,]    5    7
[2,]    6    8

$b$M_2
     [,1] [,2]
[1,]    5    7
[2,]    6    8