如何在R中连接两个列表,使第二个中的重复元素覆盖第一个中的相应元素?
我尝试了c()
,但它保留了重复:
l1 <- list(a = 1, b = 2)
l1 <- c(l1, list(b = 3, c = 4))
# $a
# [1] 1
#
# $b
# [1] 2
#
# $b
# [1] 3
#
# $c
# [1] 4
我想要一些会产生这种效果的东西:
# $a
# [1] 1
#
# $b
# [1] 3
#
# $c
# [1] 4
希望存在比调用某些* apply函数更简单的东西吗?
答案 0 :(得分:5)
这适用于duplicated
:
> l1[!duplicated(names(l1), fromLast=TRUE)]
$a
[1] 1
$b
[1] 3
$c
[1] 4
答案 1 :(得分:4)
我怀疑你可以通过使用&#34; rlist&#34;来获得你想要的行为。包;具体而言,list.merge
似乎可以满足您的需求:
l1 <- list(a = 1, b = 2)
l2 <- list(b = 3, c = 4)
library(rlist)
list.merge(l1, l2)
# $a
# [1] 1
#
# $b
# [1] 3
#
# $c
# [1] 4
尝试使用list.merge(l2, l1)
来了解功能的行为。
如果只有两个列表,如@PeterDee所述,list.merge
函数几乎使modifyList
接受两个以上的列表。因此,对于此特定示例,您可以跳过加载任何包并直接执行:
modifyList(l1, l2)
答案 2 :(得分:1)
我确信有一种比以下更快的方式:
l1 <- list(a = 1, b = 2)
l2 <- list(b = 3, c = 4)
l1 <- c(l1[!(names(l1) %in% names(l2))], l2)
您获取l1
中不在l2
的名称并连接两个列表
答案 3 :(得分:0)