2017-08-15 78 views
0

NA比較語義當我R中使用==這會產生NA%,R中

> 1==NA 
[1] NA 

但是比較了多種以NA,如果我用%in%

> 1 %in% c(NA) 
[1] FALSE 

什麼去這裏? %in%是不是在幕後使用==

+0

如果檢查功能 ,它是做'比賽即'匹配(x,表,不匹配= 0L)> 0L' – akrun

回答

3

關於比較操作==,它處理NA如下:

缺失值(NA)和NaN值被認爲是不可比較的,甚至自己解決,所以他們參與的比較總是會導致NA。當字符串進行比較時,也會導致缺少值,而在當前整理語言環境中則有一個值無效。 (見?`==`

而且從?`%in%`我們學習:

究竟是什麼比賽什麼是在一定程度上定義的問題。對於所有類型,NA與NA匹配並且沒有其他值。對於實數和複數值,NaN值被視爲與任何其他NaN值匹配,但不匹配NA。

那%中永遠不會返回NA使它在if條件下特別有用。

發生這種情況,因爲(如@akrun也在評論中指出)

%in%是目前被定義爲 "%in%" <- function(x, table) match(x, table, nomatch = 0) > 0