Как исправить в R: отсутствует значение там, где нужно true/false


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

Error in if (x[i] == NA) { : missing value where TRUE/FALSE needed

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

Оператор if ожидает либо значение TRUE, либо значение FALSE, поэтому вместо него необходимо использовать is.na(x) , поскольку эта функция всегда возвращает значение TRUE или FALSE.

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

Предположим, мы пытаемся просмотреть список значений в векторе в R и вывести слово «отсутствует» каждый раз, когда в векторе есть значение NA:

#define vector with some missing values
x <- c(2, NA, 5, 6, NA, 15, 19)

#loop through vector and print "missing" each time an NA value is encountered
for (i in 1:length(x)) {

 if (x[i] == NA) {
 print('Missing')
 }
}

Error in if (x[i] == NA) { : missing value where TRUE/FALSE needed

Мы получаем ошибку, потому что использовали синтаксис x[i] == NA .

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

Нам нужно изменить синтаксис на is.na(x) следующим образом:

#define vector with some missing values
x <- c(2, NA, 5, 6, NA, 15, 19)

#loop through vector and print "missing" each time an NA value is encountered
for (i in 1:length(x)) {

 if (is. na (x[i])) {
 print('Missing')
 }
}

[1] "Missing"
[1] "Missing"

Обратите внимание, что мы не получаем сообщение об ошибке и можем печатать слово «отсутствует» каждый раз, когда встречаем значение NA в векторе.

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

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

Как исправить: NA, введенные принуждением
Как исправить: неправильное количество индексов в матрице
Как исправить: количество элементов для замены не кратно длине замены

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