variable - Error en si/while(condición){: el argumento es de longitud cero
nombre a variable en un loop en r (3)
Recibi el error
Error in if (condition) { : argument is of length zero
o
Error in while (condition) { : argument is of length zero
¿Qué causa este mensaje de error y qué significa?
En una inspección adicional parece que el valor es NULL
.
condition
## NULL
Para lidiar con este error, ¿cómo pruebo los valores NULL?
Esperaba que esto volviera TRUE
, pero obtuve un valor lógico vacío:
condition == NULL
## logical(0)
Al probar los valores NULL, desea utilizar is.null(hic.data[[z]])
.
?NULL
Ves ?NULL
Tienes que usar is.null
''is.null'' devuelve ''TRUE'' si su argumento es ''NULL'' y ''FALSE'' de lo contrario.
Prueba esto:
if ( is.null(hic.data[[z]]) ) { print("is null")}
De la sección 2.1.6 de la definición del lenguaje R
Hay un objeto especial llamado NULL. Se utiliza cuando es necesario indicar o especificar que un objeto está ausente. No debe confundirse con un vector o lista de longitud cero. El objeto NULL no tiene tipo ni propiedades modificables. Solo hay un objeto NULL en R, al que se refieren todas las instancias. Para probar el uso nulo es.null. No puede establecer atributos en NULL.
¿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 entrada para la condición.
El error se produce cuando la condición de entrada es de longitud cero. Puedes reproducirlo con, por ejemplo:
if (logical()) {}
## Error: argument is of length zero
if (NULL) {}
## Error: argument is of length zero
Errores comunes que conducen a este error.
Es fácil causar accidentalmente este error al usar $
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 se usa if
, if
else
si te ifelse
, o sobrepasar T
y F
Tenga en cuenta estos errores y advertencias relacionados con otras malas condiciones:
Error en if / while (condición) {: falta el valor donde se necesita VERDADERO / FALSO
Error en if / while (condición): el argumento no se puede interpretar como lógico
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 pruebo estos valores?
NULL
valores NULL
se pueden probar utilizando is.null
. Vea la respuesta de GSee para más detalles.
Para hacer sus llamadas 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 assert_is_if_condition
de assertive.code
.