2017-07-15 63 views
-1

在R,I有一個函數離羣值接受長度3的數值矢量我試圖這樣:邏輯表達式計算到NA

Outlier <- function(x) { 
    x <- sort(x) 
    if((x[1] < 1e-2) %% (x[1] > 1e-4))) { 
print(x) 
    } 
... 

然而,我正在錯誤消息「中的錯誤,如果(條件){:參數不能解釋爲邏輯「。調試完成後,我發現每當x [1] == 0時都會產生錯誤。某種程度上,當x [1] == 0時,邏輯表達式的計算結果爲NA。與其他值一樣按預期工作。這是爲什麼,我該如何防止它?

+4

嚴重問題:您認爲%%運算符有什麼作用? – Roland

+0

我現在看到,當我打算使用&& – traviata

回答

2

爲了防止發生這種情況,您應該修改您的目標。 NA僅在x[1]爲零時才顯示,只要x[1] > 1e-4評估爲FALSE就會顯示。

TRUE %% FALSE 
[1] NA 
FALSE %% FALSE 
[1] NA 

這顯然是有道理的,我才驚訝地發現它不返回NaN

1 %% 0 
[1] NaN 
0 %% 0 
[1] NaN 

這使我得出這樣的結論R解析器是足夠聰明的認識邏輯和數值之間的差值。

+0

時,我輸入了%%與解析器無關,邏輯值在這裏被強制爲整數。退房1L %% 0L。 – Roland

+0

@羅蘭:謝謝,我應該在發表聲明之前檢查一下。 –