2014-02-06 106 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