Как исправить в 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, введенные принуждением
Как исправить: неправильное количество индексов в матрице
Как исправить: количество элементов для замены не кратно длине замены