我有一个包含约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中所有新的唯一名称。 我可以用相当复杂的方式完成第一个任务:
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
的一部分复制到其中会很复杂。
由于我需要对许多列表执行此操作,因此比我现在更简单的方法很方便。
非常感谢您!这是项目的最后一分钟,因此深表感谢!
这个问题基于previous question,我措辞太粗,造成了混乱。感谢那些仍在努力帮助我的用户。
答案 0 :(得分:1)
这些是您要找的吗?
intersect(v1, v2)
# [1] "B" "C"
setdiff(v2, v1)
# [1] "D"
答案 1 :(得分:1)
如果我对您的理解正确,那么您可以首先获取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