所以我們有這樣的行爲:爲什麼任何()返回NA如果沒有真正的價值
any(c(TRUE, FALSE, NA))
#> [1] TRUE
any(c(TRUE, NA))
#> [1] TRUE
any(c(FALSE, NA))
#> [1] NA
誰知道返回NA,而不是假的理由? IMO的功能應該測試是否存在非FALSE值,而NA不是。
所以我們有這樣的行爲:爲什麼任何()返回NA如果沒有真正的價值
any(c(TRUE, FALSE, NA))
#> [1] TRUE
any(c(TRUE, NA))
#> [1] TRUE
any(c(FALSE, NA))
#> [1] NA
誰知道返回NA,而不是假的理由? IMO的功能應該測試是否存在非FALSE值,而NA不是。
此行爲是在幫助文件中的值部分解釋:
返回的值是TRUE,如果在X的值的至少一個爲真,假,如果所有的值的x是假的(包括如果沒有值)。否則,該值爲NA。
當你注意,這似乎從更常用的功能,如sum
和mean
行爲不同,因爲NA的存在向量參數這些函數返回值NA。此問題在感知受到joran's answer它指的是文檔從?Logic
,清理重新報價:
NA是一個有效的邏輯對象。如果x或y的分量是NA,如果結果不明確,結果將爲NA。換句話說NA & TRUE評估爲NA,但不適用FALSE評估爲FALSE。看下面的例子。
所以在歧義的情況下,例如,平均值的其中載體含有NA,或NA | FALSE
其中缺失值可能是TRUE的計算,NA將成爲輸出。而在其他情況下,例如any(c(TRUE, NA))
或TRUE | NA
,儘管存在缺失值,但結果是明確的。 @ Floo0的回答以及對問題的一些評論中,這種邏輯可能更清楚。
我將包裹該呼叫在isTRUE
,這產生所期望的結果:
> any(c(FALSE, NA))
[1] NA
> isTRUE(any(c(FALSE, NA)))
[1] FALSE
從文檔:
'IsTrue運算(X)' 是「相同的縮寫(TRUE, X)」,所以是 真當且僅當‘x’爲長度爲一個邏輯向量,其僅 元件是‘TRUE’,並且沒有屬性(即使不名稱)。
好的提示,謝謝 – geotheory
我可能是錯了,但這裏的邏輯是:
NA
意味着未知的值。因此,問題
是(
FALSE
,NA
)的值是否爲真?
的答案爲「我不知道」又名NA
因爲NA
可能是TRUE
但它是在你所問的那一刻未知。
以問題
是(
TRUE
,NA
)真什麼價值?
這是回答TRUE
爲肯定第一個值是TRUE
。
因爲'FALSE | NA'返回NA – akrun
從幫助文件的values部分:「如果x中的至少一個值爲TRUE,返回的值爲TRUE,如果x中的所有值都爲FALSE,則返回FALSE (包括如果沒有值),否則值爲NA。「 – lmo
使用'任何(na.omit(C(FALSE,NA)))'總是得到TRUE或FALSE。 – Axeman