1
我有一个由另外两个列表组成的列表,它们的元素有部分重叠的名称,我需要将它们合并成一个列表,元素由元件。按元素名称合并/合并列表(列表中的列表)
在Combine/merge lists by elements names (list in list)中提供了一种解决方案,如果两个列表是单独的对象,即不是嵌套(再次)在单个列表中,那么如何解决这个问题。
下面是实施例的涡卷向上
# Generate some toy data
library(digest)
l.1 <- rep(list(list(c(10,20), NULL),
list(c(10,20,30), NULL),
list(c(9,12,13), NULL)), 10000)
names(l.1) <- sapply(sample(1:30000, 30000, replace=FALSE), digest)
l.2 <- rep(list(list(NULL,c(1,0)),
list(NULL,c(1,2,3))), 10000)
names(l.2) <- c(names(l.1)[1:10000], sapply(sample(30001:40000, 10000, replace=FALSE), digest))
# Apply the solution posted at
# https://stackoverflow.com/questions/23483421/combine-merge-lists-by-elements-names-list-in-list
keys <- unique(c(names(l.1), names(l.2)))
l <- setNames(lapply(keys, function(key) {
l1 <- l.1[[key]]
l2 <- l.2[[key]]
len <- max(length(l1), length(l2))
lapply(seq(len), function(i) c(l1[[i]], l2[[i]]))
}), keys)
如上所述,这溶液是说明方便时单独的列表的(这里是2)的数量是小的。
这些列表嵌套在单个列表中的场景更为现实。因此,可以对所有嵌套列表执行操作。这不会有问题,如果有2名嵌套列表或300
此的一个例子是:
l.new <- list(l.1, l.2)
要修改上述解决方案,我知道,第一行必须更改为:
keys <- unique(unlist(lapply(l.new, names)))
但是我不知道如何去适应二线
l <- setNames(lapply(keys, function(key) {
l1 <- l.1[[key]]
l2 <- l.2[[key]]
len <- max(length(l1), length(l2))
lapply(seq(len), function(i) c(l1[[i]], l2[[i]]))
}),
keys)
我很感激任何帮助。
感谢您的帮助。 – majom
你能否把'keys < - unique(c(names(l.1),names(l.2)))''改成'keys < - unique(unlist(lapply(l.new,names)))'for以后的参考。不知怎的,当我自己编辑你的帖子时,这个改变并没有通过审查过程。 – majom
@majom我做了这个更新 – josliber