我有两个列表,其中的元素有部分重叠的名称,我需要将它们逐个元素合并/组合成一个单一的列表:
我的问题与按元素名称合并/组合列表有关,但我示例中的数据结构更加复杂,因此,在上面提到的链接下提供的解决方案在这种情况下无法使用。
这里是一个简化的玩具例子:
l.1 <- list(list(c(10,20), NULL),list(c(10,20,30), NULL), list(c(9,12,13), NULL))
names(l.1) <- c("a","b","c")
l.2 <- list(list(NULL,c(1,0)),list(NULL,c(1,2,3)))
names(l.2) <- c("a","b")
因此,数据的类型是“列表中的列表”,并且看起来像这样:
# > l.1
# $a
# $a[[1]]
# [1] 10 20
# $a[[2]]
# NULL
#
# $b
# $b[[1]]
# [1] 10 20 30
# $b[[2]]
# NULL
#
# $c
# $c[[1]]
# [1] 9 12 13
# $c[[2]]
# NULL
#
# > l.2
# $a
# $a[[1]]
# NULL
# $a[[2]]
# [1] 1 0
#
# $b
# $b[[1]]
# NULL
# $b[[2]]
# [1] 1 2 3
合并这两个列表的结果应该看起来像这样:
# $a
# $a[[1]]
# [1] 10 20
# $a[[2]]
# [1] 1 0
#
# $b
# $b[[1]]
# [1] 10 20 30
# $b[[2]]
# [1] 1 2 3
#
# $c
# $c[[1]]
# [1] 9 12 13
# $c[[2]]
# NULL
我已经根据Combine/merge lists by elements names中给出的解决方案进行了适应,但这似乎对于这种数据结构不起作用。
以下是我尝试过的:
l <- list(l.1, l.2)
keys <- unique(unlist(lapply(l, names)))
do.call(mapply, c(FUN=c, lapply(l, `[`, keys)))
我感激任何帮助。
keys <- unique(c(names(l.1), names(l.2)))
吗?也就是说,里面不应该有一个c()
吗? - GSee