2017-02-14 61 views
3

所以我們有這樣的行爲:爲什麼任何()返回NA如果沒有真正的價值

any(c(TRUE, FALSE, NA)) 
#> [1] TRUE 
any(c(TRUE, NA)) 
#> [1] TRUE 
any(c(FALSE, NA)) 
#> [1] NA 

誰知道返回NA,而不是假的理由? IMO的功能應該測試是否存在非FALSE值,而NA不是。

+3

因爲'FALSE | NA'返回NA – akrun

+4

從幫助文件的values部分:「如果x中的至少一個值爲TRUE,返回的值爲TRUE,如果x中的所有值都爲FALSE,則返回FALSE (包括如果沒有值),否則值爲NA。「 – lmo

+2

使用'任何(na.omit(C(FALSE,NA)))'總是得到TRUE或FALSE。 – Axeman

回答

4

此行爲是在幫助文件中的值部分解釋:

返回的值是TRUE,如果在X的值的至少一個爲真,假,如果所有的值的x是假的(包括如果沒有值)。否則,該值爲NA。

當你注意,這似乎從更常用的功能,如summean行爲不同,因爲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的回答以及對問題的一些評論中,這種邏輯可能更清楚。

4

我將包裹該呼叫在isTRUE,這產生所期望的結果:

> any(c(FALSE, NA)) 
[1] NA 
> isTRUE(any(c(FALSE, NA))) 
[1] FALSE 

從文檔:

'IsTrue運算(X)' 是「相同的縮寫(TRUE, X)」,所以是 真當且僅當‘x’爲長度爲一個邏輯向量,其僅 元件是‘TRUE’,並且沒有屬性(即使不名稱)。

+0

好的提示,謝謝 – geotheory

5

我可能是錯了,但這裏的邏輯是:

NA意味着未知的值。因此,問題

是(FALSE,NA)的值是否爲真?

的答案爲「我不知道」又名NA因爲NA可能是TRUE但它是在你所問的那一刻未知。

以問題

是(TRUENA)真什麼價值?

這是回答TRUE爲肯定第一個值是TRUE

+1

這實際上是答案(做了一個類似的評論,其內容實際上是@Axeman在我之前所說的)。 – nicola

+0

@nicola:對不起,我沒有看到您的評論...你想我刪除我的答案並回答自己? – Rentrop

+2

沒有。這個答案需要在這裏,因爲在我看來,接受的答案並沒有強調爲什麼這是完全預期的原因。發佈它的人很少。 – nicola

相關問題