1

2 セットのリストがあり、最初のリストの各ベクトルを 2 番目のリストの対応するベクトルと照合して、何が欠けているかを確認する必要があります (2 番目のリストにない最初のリストにあるものにのみ関心があります)。 .

サンプルデータ:

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

unlist と setdiff() の両方を使用する必要があるため、関数を使用して両方を実行しています。

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

期待される結果は、最初のセットでは何もなく、2 番目のセットでは 5 です。残念ながら、これは x[2] にあるが y[2] にはない 5 を拾っていません。代わりに、これは私の結果です:

[[1]]
numeric(0)

[[2]]
numeric(0)

奇妙なことに、x[2] の 5 を y[2] にない 3 のような数字に変更すると、期待される結果が得られるため、5 から 50 に一致しているようです (多分?)。

> 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 に答える