2011-10-31 12 views
6

可能性の重複:
R: subset() logical-and operator for chaining conditions should be & not &&RのAND、OR論理演算子の短い形式(&、|)と長い形式(&&、||)の違いは何ですか?

Rでの短い(&|)と長い(&&||)フォームAND、OR論理演算子の違いは何ですか?例えば

:私はいつも私のコードで短いフォームを使用

  1. x==0 & y==1
  2. x==0 && y==1
  3. x==0 | y==1
  4. x==0 || y==1

。何かハンディキャップがありますか?

答えて

6

&| - 常に差theck単一TRUE又はFALSE

を生成要素単位であり、ベクトル演算で使用することができ、一方、||&&

> x <- 1:5 
> y <- 5:1 
> (x > 2) & (y < 3) 
    [1] FALSE FALSE FALSE TRUE TRUE 
> (x > 2) && (y < 3) # here operaand && takes only 1'st elements from logical 
        # vectors (x>2) and (y<3) 
> FALSE 

したがって、&&及び||は、if (condition) state_1 else state_2ステートメントで一般的に使用されており、 のように長さが1

+0

おそらく、最初の値だけが使用されている場合、 '||'と '&&'がif節に優先されることを追加すると便利です。 –

+3

@lselzer ... '||'と '&&' * short-circuit *のため、つまり、後続の節を不必要にチェックしないためです。すなわち、A || B || 'C 'は評価を停止し、' TRUE'要素を見つけるとすぐに 'TRUE'を返します。' A && B && C'は評価を停止し、 'FALSE'要素を見つけたら直ちに' FALSE'を返します。 'if(!is.na(x)&& x> 0)' ... –

+0

@Max、微妙な点ですが、 '&&'は常に 'TRUE'や' FALSE'を返すわけではありません。 'TRUE && NA'は' NA'を返します。 – nograpes

関連する問題