1

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

样本数据:

> 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] 中但不在 y[2] 中的 5。相反,这是我的结果:

[[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

知道发生了什么吗?还是有更好的方法来做到这一点?

4

1 回答 1

2

这个怎么样?

lapply(seq_along(x), function(i) setdiff(x[[i]], y[[i]]))
于 2016-10-27T19:10:56.033 回答