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

159

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

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

или

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

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

Concerned_Citizen
источник
5
Оператор двойного равенства не может терпеть NAни одну из сторон. Если я определю: x = NAи затем сделаю то, if (x == NA){ ... }то эта ошибка будет выдана во время выполнения, когда анализатор исследует левую часть двойного равенства. Чтобы исправить эту ошибку, убедитесь, что каждая переменная в вашем условии не используется NA is.na(your_variable).
Эрик Лещинский

Ответы:

203

Оценка 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
Брайан Диггс
источник
10

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

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

изменил это на

if (is.null(x) || x == '') {
pbatey
источник
1
Кстати, есть также!(length(x) == 1L && nzchar(x))
Фрэнк