1. ホーム
  2. r

[解決済み] Rの==と%in%演算子の違い【重複】について

2022-03-05 03:42:15

質問

の実用的な違いについて質問です。 ==%in% 演算子をRで使用することができます。

仕事で、どちらかの演算子でフィルタリングすると、異なる結果が得られるという事例に遭遇しました(例えば、一方は800行、他方は1200行で結果が得られる)。私は過去にこの問題に遭遇し、私が望む結果を得ることを確実にする方法で検証することができました。しかし、どのように異なるのかについては、まだ困っています。

どなたか、これらの演算子がどのように違うのか、教えてください。

どのように解決するのですか?

%in% 値一致 で、quot;最初の引数が2番目の引数にマッチする(最初の)位置のベクトルを返します" (参照 help('%in%') つまり、異なる長さのベクトルを比較して、あるベクトルの要素が別のベクトルの少なくとも1つの要素と一致するかどうかを確認することができます。出力の長さは、比較されるベクトル(最初のベクトル)の長さと同じになります。

1:2 %in% rep(1:2,5)
#[1] TRUE TRUE

rep(1:2,5) %in% 1:2
#[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE

#Note this output is longer in second


== 論理演算子 2つのものが完全に等しいかどうかを比較するためのものです。ベクターの長さが等しい場合、要素は要素ごとに比較されます。そうでない場合は、ベクトルは再利用されます。出力の長さは、長い方のベクトルの長さに等しくなります。

1:2 == rep(1:2,5)
#[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE

rep(1:2,5) == 1:2
#[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE


1:10 %in% 3:7
#[1] FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE

#is same as 

sapply(1:10, function(a) any(a == 3:7))
#[1] FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE


注:可能であれば identical または all.equal ではなく == とします。