在R中查找列表之间的缺失值

时间:2016-10-27 19:02:09

标签: r set-difference

我有两组列表,需要检查第一个列表中的每个向量与第二个列表中的相应向量,以查看缺少的内容(我只对第一个列表中不存在的内容感兴趣第二个)。

示例数据:

> x <- list(c(100,5,1), c(1,20,5)) 
> y <- list(c(1,2,5,10,20,50,100), c(1,20,50,100))

我需要同时取消列表并使用setdiff(),所以我正在使用一个函数来执行这两个操作:

> lapply(x, function(a,b) setdiff(unlist(a),unlist(b)), y)

第一组的预期结果为零,第二组为5。不幸的是,这并没有找到x [2]中的5但不是y [2]。相反,这是我的结果:

[[1]]
numeric(0)

[[2]]
numeric(0)

奇怪的是,它似乎匹配5到50(可能是?),因为如果我将x [2]中的5更改为像y [2]中找不到的3这样的数字,我得到了预期结果:

> x <- list(c(100,5,1), c(1,20,3))
> lapply(x, function(a,b) setdiff(unlist(a),unlist(b)), y)
[[1]]
numeric(0)

[[2]]
[1] 3

知道发生了什么事吗?或者有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

这个怎么样?

lapply(seq_along(x), function(i) setdiff(x[[i]], y[[i]]))