merge_list <- function(x, y, keep = c("right", "left")) {
keep <- match.arg(keep)
stopifnot(is.list(x), is.list(y))
x <- Filter(Negate(is.null), as.list(x))
y <- Filter(Negate(is.null), as.list(y))
c(x, y)[!duplicated(c(names(x), names(y)), fromLast = keep == "right")]
}
merge_list(
list(a = 1, b = 2, c = NULL),
list(a = 2, c = 3)
)
#> $b
#> [1] 2
#>
#> $a
#> [1] 2
#>
#> $c
#> [1] 3
merge_list(
list(a = 1, b = 2, c = NULL),
list(a = 2, c = 3),
keep = "left"
)
#> $a
#> [1] 1
#>
#> $b
#> [1] 2
#>
#> $c
#> [1] 3
Created on 2023-05-17 with reprex v2.0.2