2014-02-06 151 views
0

我試着查看其他問題,但沒有一個相當符合標記。我試圖比較兩行,並根據比較結果在行的末尾添加一個新列中的數字。我使用mtcars:R - 參數長度爲零

我使用的代碼很簡單:

for (i in 1:nrow(mtcars)-1) { 
    if (mtcars[i,6] > mtcars[i+1,6]){ 
    mtcars[i,12] = 5 
    } 
} 

哪裏山坳12是一個新列。我收到以下錯誤信息:

Error in if (mtcars[i, 6] < mtcars[i + 1, 6]) mtcars[i, 12] = 10 : argument is of length zero 

不應該有任何空參數,所以我不知道什麼是返回一個空參數,爲什麼這是一個問題。

感謝 約翰

+0

請發佈您的數據樣本。 –

+1

'圓括號'是你的朋友。看看'1:nrow(mtcars)-1' –

+1

這個數據是mtcars的...它內置到R. – JohnB

回答

2

1:nrow(mtcars)-1

相比之下,與1:(nrow(mtcars)-1)
# Note the parens aroud the right-hand-side of ':'

這個錯誤來自試圖採取mtcars[0, ]這將是一個零長度的向量,這反過來又混亂up if子句


> 1:nrow(mtcars)-1 
[1] 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 
[25] 24 25 26 27 28 29 30 31 
> 1:(nrow(mtcars)-1) 
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 
[25] 25 26 27 28 29 30 31 
+1

擊敗我的幾個+1。我可能會在OP中添加一個,我通過在第2行放置一個'browser()'來解決這個問題。'browser()'是一個好的程序員朋友。 –

+0

太好了 - 謝謝大家。你們真棒。 – JohnB