【发布时间】:2019-05-06 18:54:10
【问题描述】:
我想将两个命名列表 listA 和 listB 加入/附加/组合/合并到一个列表 (listComplete) 中。如果元素在两个列表中,则保留一个并丢弃另一个。
让
listA = list(a = 'a', b = 'b')
listB = list(a = 'a_FromListB', c = 'c')
然后我想加入/结合这两个来
listComplete = list(a = 'a_FromListB', b = 'b', c = 'c')
我尝试过使用c,但这会重复所有元素。我读过base::append 只是c 的包装,由于某种原因,我在purrr::append 上遇到错误(命名空间中不存在-我使用的是purrr 0.3.2)。我也尝试过purrr::list_modify,但是这个“嵌套”listB 到 listA 中的元素 a:
purrr::list_modify(listA, listB )
$a
$a$a
[1] "a_FromB"
$a$c
[1] "c"
$b
[1] "b"
这很重要
- 只保留来自
listB的元素a, - 不是嵌套列表,
- 保留所有其他(不相交的)元素。
一个好处是对新列表进行排序,使其以listA 开头(其中listB 中的所有元素都替换为listB 中的值)然后listB。
我知道我可以编写自己的函数,但这似乎是开箱即用的东西——尤其是来自purrr。
【问题讨论】:
-
你需要
c(listA, listB)[!duplicated(c(names(listA), names(listB)), fromLast = TRUE)] -
啊!谢谢!我不知道
duplicated( , fromLast)。不错!!