我绝对同意这不直观(我之前就说过这一点 https://stackoverflow.com/questions/1535021/whats-the-biggest-r-gotcha-youve-run-across)。为了捍卫 R,我认为知道何时有缺失值是有用的(即这不是一个错误)。这==
运算符明确设计用于通知用户 NA 或 NaN 值。请参阅 ?"==" 了解更多信息。它指出:
缺失值 ('NA') 和 'NaN' 值被视为
甚至与他们自己都无法比较,所以涉及他们的比较
总是会导致“NA”。
换句话说,缺失值无法使用二元运算符进行比较(因为它是未知的)。
除了 is.na() 之外,你还可以这样做:
which(a$col2==2) # tests explicitly for TRUE
Or
a$col2 %in% 2 # only checks for 2
%in% 被定义为使用match()
功能:
'"%in%" <- function(x, table) match(x, table, nomatch = 0) > 0'
这也包含在《R地狱》 http://www.burns-stat.com/pages/Tutor/R_inferno.pdf.
检查数据中的 NA 值是crucial在 R 中,因为许多重要的运算符并没有按照您期望的方式处理它。除了 == 之外,对于 &、|、
更新:当有多个逻辑条件时,NA如何处理?
NA
是一个逻辑常量,如果您不考虑可能返回的内容(例如,NA | TRUE == TRUE
)。这些真值表来自?Logic
可以提供一个有用的说明:
outer(x, x, "&") ## AND table
# <NA> FALSE TRUE
#<NA> NA FALSE NA
#FALSE FALSE FALSE FALSE
#TRUE NA FALSE TRUE
outer(x, x, "|") ## OR table
# <NA> FALSE TRUE
#<NA> NA NA TRUE
#FALSE NA FALSE TRUE
#TRUE TRUE TRUE TRUE