我有一个列表,其中有〜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"