2014-04-03 48 views
1

我運行在一個大於測試(見下文)for循環:如何在測試中使用數字(0)?

if(x > y){...} 

,但在一個點y將成爲數字(0),而x將仍然是一個數字。所以我需要知道是否還有一種方法可以測試一個數字是否大於數字(0)。這是錯誤消息我得到的,當我做到這一點:

Error in if (x > y) { : 
    argument is of length zero 

有沒有一種方法來測試它,甚至一種爲替代只是普通的數字0(0),在這種情況下?

感謝

+0

你可以用'tryCatch'來做到這一點。發佈你的代碼,我會告訴你 –

+0

'numeric(0)'(或任何零長度向量)可以通過檢查它的'長度'來識別,這將是0. – joran

+0

你是絕對正確的。不知道我在想那個。對於那個很抱歉。 –

回答

1

什麼是應該當你比較空值的號碼的情況發生?條件x> y是否應該評估爲TRUE或FALSE,還是應該有不同的效果?處理這種情況的一種方法是這樣的:

if (length(y) == 0) { 
    cat("y is numeric(0)") 
} else { 
    if (x > y) { 
     cat("x is greater than y") 
    } else { 
     cat("x is less than or equal y") 
    } 
} 
1

另一種方法,這取決於(如BigFinger寫了)你想要的分支是什麼,

if(length(x)>0 && x>y) {do_your_stuff} 

我這裏假設你的xy是標量。否則,您需要更加小心,因爲if不接受多值結果。

+1

'&&'的一個問題是,它默默地接受長度大於1的向量的第一個元素。'if'給出警告消息。 –

+1

@MatthewLundberg是的,因此我的警告。 –

相關問題