羽鳥がこんなことをつぶやいてました。
#rstats challenge: what does NA * 0 return? what does NA ^ 0 return? why?
— Hadley Wickham (@hadleywickham) 2015, 5月 14
Related #rstats quiz: what is NA | TRUE and NA & FALSE ? Why aren't NAs "infectious" in those cases?
— Hadley Wickham (@hadleywickham) 2015, 5月 14
これたしかによく分からないのでメモ。
?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 | TRUE
とNA & FALSE
は、NAがなにかに関係なくTRUE/FALSEが定まるので、正しいです。NA ^ 0
も、NAが何の値かに関わらず定まるので似たようなノリですが、このドキュメントからはそうなると読み取れない気がします。うむむ。。
あと、何が来てもNAを返す、という挙動を忘れてよく引っかかります。
a <- c(1, 2, NA) # aが1のやつだけ抜き出したいのに、NAが混ざる a[a == 1] #> [1] 1 NA