r-基于向量重叠的列表中删除和附加元素



我有一个列表,其中有〜500个模型对象。此对象的名称为v1:

existing.list <- vector("list", 3)
v1 <- names(existing.list) <- c("A", "B", "C")

我现在也需要建模不同的数据集,并保存在同一列表中。该新数据集中的对象与existing.list中的某些对象重叠。因为这很耗时,所以我确实想保持旧结果。此新数据集的名称为v2:

v2 <- c("B", "C", "D")

我首先要删除不在V2中的V1中的对象,然后添加到现有。列出V2中的所有新的,唯一的名称。我可以以相当复杂的方式完成第一个任务:

rm <- v1[!v1 %in% v2]
rm.i <- which(v1 %in% rm)
v1 <- v1[-rm.i]

,但随后我未能附加新对象,这是由v2中的唯一元素确定的:

new.elements <- v2[!v2 %in% v1]

所需的输出是一个修改的existing.list,其完整元素" B"one_answers" C"和一个新的空元素" D"。基本上,它的列表具有由v2中的名称确定的元素,但是出于多种原因,仅创建一个新列表并将existing.list的部分复制到它是复杂的。由于我需要在许多列表中执行此操作,因此比我现在要做的更复杂的方法很方便。

非常感谢您!这是一个项目的最后一刻,因此任何帮助都将受到高度赞赏!

这个问题是基于以前的问题,我用它措辞,因此造成了混乱。感谢那些仍然试图帮助我的用户。

如果我正确理解您,您可以首先获取v2中的元素的名称,但在v1

中不能获取元素的名称。
tmp <- setdiff(v2, v1) # "D"

然后子集existing.list,并将其附加如下

existing.list <- c(existing.list[v1 %in% v2], 
                   setNames(vector("list", length(tmp)), tmp))

结果

existing.list
#$B
#NULL
#$C
#NULL
#$D
#NULL

这些是您要寻找的吗?

intersect(v1, v2)
# [1] "B" "C"
setdiff(v2, v1)
# [1] "D"

最新更新