2014-02-06 2 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, ] который будет вектор нулевой длины, что, в свою очередь, столовых до 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, что я понял это, разместив 'browser()' в строке 2. 'browser()' является хорошим другом программиста. –

+0

Отлично - спасибо всем. Вы, ребята, потрясающие. – JohnB

Смежные вопросы