I have two lists, whose elements have partially overlapping names, which I need to merge/combine together into a single list, element by element:
My question is related to Combine/merge lists by elements names, but the data structure in my example is more complicated and thus, the solution provided under the above mentioned link does not work in this case.
Here is a simplified toy example:
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")
Thus, the data is of type "list in list" and looks like this:
# > 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
The result of merging both lists should look like this:
# $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
I already adapted the solution given in Combine/merge lists by elements names, but this seems not to work for this data structure.
Here is what I tried:
l <- list(l.1, l.2)
keys <- unique(unlist(lapply(l, names)))
do.call(mapply, c(FUN=c, lapply(l, `[`, keys)))
I appreciate any help.