[英]in R does NA == NA?
identical(NA, NA)
返回TRUE
,但是以下代碼從日期框架中過濾掉NA
:
library(tidyverse)
filter(starwars, birth_year == birth_year)
如果NA
確實等於NA
則上面的星際大戰篩選數據框應包含NA
出生年份。 為什么不呢?
NA identical
NA identical
,但不相等。 如果運行NA==NA
,則響應將為NA,因為equal操作符不適用於NA。 從identical
文檔中:
調用same是在if和while語句以及使用&&或||的邏輯表達式中測試完全相等的方法。 在所有這些應用程序中,都需要確保獲得單個邏輯值。
在這種情況下,用戶經常使用比較運算符,例如==或!=。 看起來很自然,但這不是這些運算符在R中設計的目的。它們返回的對象類似於參數。 如果您期望x和y的長度為1,但碰巧其中一個不是,則不會得到單個FALSE。 同樣,如果參數之一是NA,則結果也是NA。 無論哪種情況,表達式if(x == y)....都無法正常工作。
從==
的文檔中:
缺失值(NA)和NaN值甚至被認為是不可比的,因此涉及它們的比較將始終導致NA。 比較字符串並且在當前的整理語言環境中其中一個無效時,也會導致缺少值。
這樣做的理由是,從概念上講,缺失的價值觀彼此不同。 它們可能表示非常不同的值,但我們只是不知道這些值是什么。
在這種情況下的替代方法是添加| is.na(birth_year)
| is.na(birth_year)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.