¿Qué causa este mensaje de error y qué significa?
if
declaraciones toman un solo valor lógico (técnicamente un vector lógico de longitud uno) como una entrada para la condición.
El error se produce cuando la condición de entrada es de longitud cero.Puede reproducirlo con, por ejemplo:
errores
if (logical()) {}
## Error: argument is of length zero
if (NULL) {}
## Error: argument is of length zero
comunes que conducen a este error
Es fácil de provocar accidentalmente este error cuando se utiliza $
indexación. Por ejemplo:
l <- list(a = TRUE, b = FALSE, c = NA)
if(l$d) {}
## Error in if (l$d) { : argument is of length zero
También using if
-else
when you meant ifelse
, o overriding T
and F
.
Nota estos errores y avisos relacionados para otras condiciones malas:
Error in if/while (condition) {: missing Value where TRUE/FALSE needed
Error in if/while (condition) : argument is not interpretable as logical
if (NA) {}
## Error: missing value where TRUE/FALSE needed
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
¿Cómo se prueba para tales valores?
NULL
los valores se pueden probar utilizando is.null
. Ver GSee's answer para más detalles.
Para hacer sus llamadas a if
seguro, un buen patrón de código es:
if(!is.null(condition) &&
length(condition) == 1 &&
!is.na(condition) &&
condition) {
# do something
}
También es posible que desee ver en assert_is_if_condition
de assertive.code
.
use 'is.null' en lugar de' == ' –