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

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

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

или

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

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

Ответы [ 2 ]

182 голосов
/ 09 сентября 2011

Оценка 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
8 голосов
/ 03 июня 2017

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

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

изменил ее на

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