subset()
が2つの条件を組み合わせた論理演算子と&&
演算子で機能しないのはなぜですか?
> subset(tt, (customer_id==177 && visit_date=="2010-08-26"))
<0 rows> (or 0-length row.names)
しかし、それらはそれぞれ個別に機能します。
> subset(tt, customer_id==177)
> subset(tt, visit_date=="2010-08-26")
(大きな一時変数の使用を避けたい-私のデータセットは巨大です)
Logical Operators
からアクセスできる?"&&"
のヘルプページから:
&と&&は論理積を示し、|と||は論理積を示します。短い形式は算術演算子とほぼ同じ方法で要素ごとの比較を実行します。長い形式は左から右に評価して各ベクトルの最初の要素のみを調べます。評価は、結果が決定されるまでのみ進行します。長い形式は、制御フローのプログラミングに適しており、通常、if句で推奨されます。
(Rバージョン2.13-0)
つまり、subset
を使用する場合は、単一の&
を使用します。
違いの図を次に示します。
c(1,1,0,0) & c(1,0,1,0)
[1] TRUE FALSE FALSE FALSE
c(1,1,0,0) && c(1,0,1,0)
[1] TRUE
これが他のプログラミングパラダイムと比較して風変わりに見える場合は、Rがベクトル化された形式の演算子を提供する必要があることに注意してください。
Rでは、実際には&
ではなく&&
演算子でペアワイズAND演算を実行し、&&
でビット単位のANDを実行します。同じルールがORにも適用されます。ビット単位のORではなく論理OR)を実行する場合は、|
演算子が必要です。