Как исправить в R: аргумент имеет нулевую длину


Одно сообщение об ошибке, с которым вы можете столкнуться при использовании R:

Error in if (x < 10) { : argument is of length zero

Эта ошибка обычно возникает, когда вы пытаетесь выполнить какое-либо логическое сравнение в операторе if в R, но переменная, которую вы используете для сравнения, имеет нулевую длину.

Двумя примерами переменных с нулевой длиной являются numeric() или character(0) .

В следующем примере показано, как устранить эту ошибку на практике.

Как воспроизвести ошибку

Предположим, мы создаем следующую числовую переменную в R с нулевой длиной:

#create numeric variable with length of zero
x <- numeric()

Теперь предположим, что мы пытаемся использовать эту переменную в операторе if:

#if x is less than 10, print x to console
if(x < 10 ) {
 x
}

Error in if (x < 10) { : argument is of length zero

Мы получаем ошибку, потому что переменная, которую мы определили, имеет нулевую длину.

Если бы мы просто создали числовую переменную с фактическим значением, мы бы никогда не получили эту ошибку при использовании оператора if:

#create numeric variable
y <- 5

#if y is less than 10, print y to console
if(y < 10 ) {
 y
}

[1] 5

Как избежать ошибки

Чтобы избежать ошибки аргумента нулевой длины , мы должны включить функцию isTRUE , которая использует следующую логику:

is. logical (x) && length(x) == 1 && !is. na (x) && x

Если мы используем эту функцию в операторе if, мы не получим ошибку при сравнении нашей переменной с некоторым значением:

if(isTRUE(x) && x < 10 ) {
 x
}

Вместо того, чтобы получить ошибку, мы просто не получаем вывода, потому что функция isTRUE(x) оценивается как FALSE , что означает, что значение x никогда не печатается.

Дополнительные ресурсы

В следующих руководствах объясняется, как исправить другие распространенные ошибки в R:

Как исправить в R: аргументы подразумевают разное количество строк
Как исправить в R: ошибка выбора неиспользуемых аргументов
Как исправить в R: замена имеет нулевую длину

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.