Error en if / while (condición) {: valor faltante donde se necesita VERDADERO / FALSO

159

Recibí este mensaje de error:

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

o

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

¿Qué significa y cómo lo evito?

Ciudadano preocupado
fuente
55
El operador de doble igual no puede tolerar un NAa ningún lado. Si defino: x = NAy luego hago un if (x == NA){ ... }error, este error se generará en tiempo de ejecución cuando el analizador examine el lado izquierdo del doble igual. Para remediar este error, asegúrese de que cada variable en su condicional no esté usando NA is.na(your_variable).
Eric Leschinski

Respuestas:

203

La evaluación de conditionresultó en un NA. El ifcondicional debe tener un TRUEo un FALSEresultado.

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

Esto puede suceder accidentalmente como resultado de los cálculos:

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

Para probar si falta un objeto, use en is.na(x)lugar de x == NA.


Vea también los errores relacionados:

Error en if / while (condición) {: el argumento es de longitud cero

Error en if / while (condición): el argumento no es interpretable como lógico

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
Brian Diggs
fuente
10

Me encontré con esto al verificar una cadena nula o vacía

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

lo cambió a

if (is.null(x) || x == '') {
pbatey
fuente
1
Fyi, también hay!(length(x) == 1L && nzchar(x))
Frank