2013-03-08 35 views
0

我一直在試圖運行該代碼(下面在這裏)和我已經得到的是消息「錯誤在如果(TEMP [II] == 0){:缺失值,其中TRUE/FALSE急需」 ......錯誤..缺失值,其中TRUE/FALSE所需

temp = c(2.15, 3.5, 0, 0, 0, 1.24, 5.42, 6.87) 
tm = length(temp) 
for (i in 1:tm){ 
    if (temp[i] == 0) { 
     counter3 = 1 
     last = temp[i - 1] 
     for (ii in i + 1:tm){ 
      if (temp[ii] == 0) { 
       counter3 = counter3 + 1 
      } 
      if (temp[ii] != 0) { 
       nxt = temp[i + counter3] 
      } 
     } 
    } 
} 
+0

如果A)中提到的語言也許會有幫助,B)固定的格式。 – 2013-03-08 16:24:02

+4

-1不搜索。本網站已多次回覆此問題,R-help等。下次在發佈問題前搜索錯誤,您可能會更快地回答問題。 – 2013-03-08 16:55:25

+1

此問題已經在此線程回答:http://stackoverflow.com/questions/7355187/error-in-if-while-condition-missing-value-where-true-false-needed – pengchy 2016-07-04 02:27:15

回答

1

難在不知道的語言,但我認爲這個問題是在II的價值可能比臨時的長度時,當我是在它的上限。我曾預計索引超出範圍或類似的東西,但不知道語言,誰知道!希望你能解決你的問題。

+0

對不起,這在R – user2145596 2013-03-08 16:47:15

1

在猜測,我會說這是R - 如果讓我猜這條線:

if (temp[i] == 0) (or temp[ii] == 0) 

正導致一個NAif條件必須有TRUEFALSE值。

使用調試器,如果可以的話,我會詢問臨時[I]前if塊的價值。

3

您的問題是temp[ii]正在恢復NA因爲ii超出界限:

ii = i + 1:tm  #Your declaration for ii 
ii = 1:tm + 1:tm #Evaluates to 

所以ii一定會大於tm(因此length(temp)在某些時候

爲了更好地理解/調試for循環,考慮印刷只是指數:

for(i in 1:tm) 
{ 
    print(i) 
    for(ii in i + 1:tm) 
     print(ii) 
} 
+0

感謝您的解答,但是當你運行該代碼打印索引我仍然得到什麼,你得到同樣的消息=/ – user2145596 2013-03-08 16:56:56

+0

? – 2013-03-08 17:05:34

+0

當我運行的代碼,我得到正確的答案 計數器3 = 3 最後= 3.5 NXT = 1.24 它是什麼都行! 唯一的問題是,我已經得到了和因爲即時通訊不熟悉R,它一直努力解決這些消息!無論如何謝謝 – user2145596 2013-03-08 17:14:09

相關問題