2016-10-27 11 views
1

私は2組のリストを持っており、最初のリストの各ベクトルを2番目のリストの対応するベクトルと照合して欠落しているものを確認する必要があります2番目のリストにない最初のリスト)。リスト間の欠損値の検索R

サンプルデータ:

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

期待される結果が、最初は何もありません:私は両方非公開にしてsetdiff()を使用する必要があるので、私は両方やって機能を使用してい

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

2番目に5を設定します。残念ながら、これはx [2]にあるがy [2]にはない5を取り上げていません。代わりに、これは私の結果である:変なふう

[[1]] 
numeric(0) 

[[2]] 
numeric(0) 

、それは私が3のように桁にX [2]に5を変更した場合ので、していないこと、5から50まで(?多分)に一致しているようですy [2]で見つかった場合、私は期待した結果を得ます:

> 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 

何が起こっているのでしょうか?それとももっと良い方法がありますか?

+0

@ダニエルは私に良い答えをくれましたが、私はまだ私の元の試みでsetdiffで起こっていたことを理解したいと思います。 – Frameworker247

+0

あなたのコードをデバッグするためにいくつかの 'print'ステートメントを追加すると、それが何をしているのか分かります:' lapply(x、function(a、b){ \t print(paste0( "a:"、paste0(unlist (unlist(a)、unlist(a)、unlist(b)、collapse = "、")) \t setdiff ) }、y) ' – SymbolixAU

答えて

2

これはいかがですか?

lapply(seq_along(x), function(i) setdiff(x[[i]], y[[i]])) 
関連する問題