好的,我有两个命名列表,一个是"expected",另一个是"observed"。它们的结构可能非常复杂,包含任意数据类型。我想获取一个新的列表,只包含观察列表中与期望列表不同的元素。以下是一个例子:
Lexp <- list(a=1, b="two", c=list(3, "four"))
Lobs <- list(a=1, c=list(3, "four"), b="ni")
Lwant <- list(b="ni")
Lwant是我希望得到的结果。我尝试了这个:
> setdiff(Lobs, Lexp)
[[1]]
[1] "ni"
不行,那会丢失名称,而我认为setdiff不会注意名称。 显然这里顺序无关紧要,我不希望a=1与b=1匹配。
不确定好的方法是什么...循环遍历名称(Lobs)列表?听起来笨拙且不像R风格,但可行...有什么优雅的想法吗?
Lexp <- list(a=1, d="ni", c=list(3, "four"))
,那么此答案返回意外的空命名列表,而应该是list(b = "ni")
。 - eliot.mcintire