当たり前なのですが、失敗したので書いておきます。
&,&&の違い
&はリストの場合はリストの要素ごとに論理積を出しますが、&&スカラしか対応しておらず、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