LoginSignup
0
1

More than 5 years have passed since last update.

dplyr内での& と &&の違い

Last updated at Posted at 2017-07-20

当たり前なのですが、失敗したので書いておきます。

&,&&の違い

&はリストの場合はリストの要素ごとに論理積を出しますが、&&スカラしか対応しておらず、1要素目同士の論理積を出します。

> a = c(TRUE,TRUE,FALSE,FALSE)
> b = c(TRUE,FALSE,TRUE,FALSE)
> a & b
[1]  TRUE FALSE FALSE FALSE
> a && b
[1] TRUE

dplyrでの条件式では

filterなどで条件式を書きますが、&&を使ってしまうと、直感的にはよくわからない結果になってしまいます。
filter内の条件式は要素ごとの比較を書いているのではなくて、あくまでリスト同士の条件を書いているということが念頭にあればこういう間違いは起こらないのでしょうが、ついつい書いてしまいます(C#erだし)。

> df <- data.frame(a=a,b=b)
> df %>% filter(a & b)
     a    b
1 TRUE TRUE
> df %>% filter(a && b)
      a     b
1  TRUE  TRUE
2  TRUE FALSE
3 FALSE  TRUE
4 FALSE FALSE
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1