基于向量重叠从列表中删除和添加元素

2023-12-23

我有一个包含约 500 个模型对象的列表。该对象的名称是 v1:

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

我现在得到了不同的数据集,我也需要对其进行建模,并将其保存在同一个列表中。这个新数据集中的对象与existing.list。因为这非常耗时,所以我确实想保留旧的结果。这个新数据集的名称是 v2:

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

我首先要删除 v1 中不在 v2 中的对象,然后将 v2 中所有新的、唯一的名称追加到现有的.list 中。 我可以用一种相当复杂的方式完成第一个任务:

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”和“C”以及一个新的空元素“D”。基本上,它是一个列表,其中的元素由中的名称确定v2,但由于多种原因,仅创建一个新列表并复制部分内容会很复杂existing.list到它。 由于我需要对多个列表执行此操作,因此比我现在所做的更简单的方法会很方便。

预先非常感谢您!这是项目的最后一刻添加,因此非常感谢任何帮助!

这个问题是基于上一个问题 https://stackoverflow.com/questions/56026040/merging-two-vectors-but-keeping-unique-elements-of-only-one-vector,我措辞草率,因此造成了混乱。我感谢那些仍然试图帮助我的用户。


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

tmp <- setdiff(v2, v1) # "D"

然后是子集existing.list并按如下方式附加

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

Result

existing.list
#$B
#NULL

#$C
#NULL

#$D
#NULL
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于向量重叠从列表中删除和添加元素 的相关文章

随机推荐