r-合并并覆盖列表元素



提前感谢您的帮助。

我有一个函数,用户可以将参数传递给具有...list()。我正在寻找一种用obj_b中存在的所有值覆盖obj_a的方法。

这里有一个代表:

# i have a default object in a function, and users can pass in ...
obj_1 <- list(apple = "green",
list(apple = "green", donut = "glazed"))
# ... is stored as obj_2
obj_2 <- list(apple = "red")
# obj_2 could also be
obj_2 <- list(apple = "red", donut = "sprinkle")

modifyList(obj_1, obj_2)
#> $apple
#> [1] "red"
#> 
#> [[2]]
#> [[2]]$apple
#> [1] "green"
#> 
#> [[2]]$donut
#> [1] "glazed"
#> 
#> 
#> $donut
#> [1] "sprinkle"

预期结果是:

#> $apple
#> [1] "red"
#> 
#> [[2]]
#> [[2]]$apple
#> [1] "red"
#> 
#> [[2]]$donut
#> [1] "sprinkle"
#> 
#> 
#> $donut
#> [1] "sprinkle"

一些递归应该在这里工作:

func <- function(L1, L2) {
L1 <- modifyList(L1, L2)
islst <- sapply(L1, is.list)
L1[islst] <- lapply(L1[islst], modifyList, L2)
L1
}
obj_1 <- list(apple = "green",
list(apple = "green", donut = "glazed"))
obj_2 <- list(apple = "red")
func(obj_1, obj_2)
# $apple
# [1] "red"
# [[2]]
# [[2]]$apple
# [1] "red"
# [[2]]$donut
# [1] "glazed"
obj_2 <- list(apple = "red", donut = "sprinkle")
func(obj_1, obj_2)
# $apple
# [1] "red"
# [[2]]
# [[2]]$apple
# [1] "red"
# [[2]]$donut
# [1] "sprinkle"
# $donut
# [1] "sprinkle"

最新更新