按元素名称重新组织嵌套列表:所有具有相同名称的元素放在一起
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$A
、a$G
、a$M_1
和 a$M_2
,并且与b
列表;然后 a
和 b
嵌套在一个更大的列表中。非常感谢任何提示。
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
我想重组 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)
这些问题的答案: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$A
、a$G
、a$M_1
和 a$M_2
,并且与b
列表;然后 a
和 b
嵌套在一个更大的列表中。非常感谢任何提示。
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