【发布时间】:2013-01-05 11:26:08
【问题描述】:
我有两个带有命名元素的列表:
a <- list(a=1, b=2)
b <- list(b=3, c=4)
我想合并这些列表,这样a中任何同名的元素都会被列表b覆盖,所以我把这个弄出来:
list(a=1, b=3, c=4)
我知道我可以循环执行此操作,但是在 R 中是否有更紧凑的方法来执行此操作?
【问题讨论】:
标签: r
我有两个带有命名元素的列表:
a <- list(a=1, b=2)
b <- list(b=3, c=4)
我想合并这些列表,这样a中任何同名的元素都会被列表b覆盖,所以我把这个弄出来:
list(a=1, b=3, c=4)
我知道我可以循环执行此操作,但是在 R 中是否有更紧凑的方法来执行此操作?
【问题讨论】:
标签: r
这是一个简单的解决方案:
# create new list
newlist <- c(a,b)
# remove list element(s)
newlist[!duplicated(names(newlist), fromLast = TRUE)]
结果:
$a
[1] 1
$b
[1] 3
$c
[1] 4
setdiff 的更简单的解决方案:
c(a[setdiff(names(a), names(b))], b)
$a
[1] 1
$b
[1] 3
$c
[1] 4
【讨论】:
R 有一个内置函数可以做到这一点modifyList
modifyList(a, b)
【讨论】:
help(package = "base") :-)
modifyList,哇。不知道这个功能存在。另外,您对 help(package = "base") 的评论值得额外 +1(不能这样)。