Как исправить в 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: замена имеет нулевую длину

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *