メモ:NAの扱いは考えたらああそうかーってなる気もするけど直観的にわかりづらい

羽鳥がこんなことをつぶやいてました。

これたしかによく分からないのでメモ。

?NAにはこんな風に書いています。

Numerical computations using NA will normally result in NA: a possible exception is where NaN is also involved, in which case either might result.

数値計算は、NAが絡むとだいたいNAになる。例外になる可能性があるのはNaNが絡んでるときとか。

Logical computations treat NA as a missing TRUE/FALSE value, and so may return TRUE or FALSE if the expression does not depend on the NA operand.

論理計算は、NAをTRUEかFALSEの欠損値として扱う。TRUE/FALSEを返す場合もあって、それはNAがどちらかによらず定まる場合。

ということで、NA | TRUENA & FALSEは、NAがなにかに関係なくTRUE/FALSEが定まるので、正しいです。NA ^ 0も、NAが何の値かに関わらず定まるので似たようなノリですが、このドキュメントからはそうなると読み取れない気がします。うむむ。。

あと、何が来てもNAを返す、という挙動を忘れてよく引っかかります。

a <- c(1, 2, NA)

# aが1のやつだけ抜き出したいのに、NAが混ざる
a[a == 1]
#> [1]  1 NA