Ошибка в if/while (условие) {: отсутствует Значение, в котором требуется TRUE/FALSE

Я получил это сообщение об ошибке:

Error in if (condition) { : missing value where TRUE/FALSE needed

или

Error in while (condition) { : missing value where TRUE/FALSE needed

Что это значит и как его предотвратить?

Ответ 1

Оценка condition привела к NA. Условие if должно иметь либо результат TRUE, либо FALSE.

if (NA) {}
## Error in if (NA) { : missing value where TRUE/FALSE needed

Это может случиться случайно, так как результаты расчетов:

if(TRUE && sqrt(-1)) {}
## Error in if (TRUE && sqrt(-1)) { : missing value where TRUE/FALSE needed

Чтобы проверить, отсутствует ли объект, используйте is.na(x), а не x == NA.


См. также связанные ошибки:

Ошибка в if/while (условие) {: аргумент имеет нулевую длину

Ошибка в if/while (условие): аргумент не интерпретируется как логический

if (NULL) {}
## Error in if (NULL) { : argument is of length zero

if ("not logical") {}
## Error: argument is not interpretable as logical

if (c(TRUE, FALSE)) {}
## Warning message:
## the condition has length > 1 and only the first element will be used

Ответ 2

Я столкнулся с этим при проверке нулевой или пустой строки

if (x == NULL || x == '') {

изменил его на

if (is.null(x) || x == '') {