2012-09-06 494 views
29

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

Error in if (condition) { : argument is of length zero 

o

Error in while (condition) { : argument is of length zero 

Lo que hace que este mensaje de error, y lo que significa?

En una inspección posterior parece que el valor es NULL.

condition 
## NULL 

Con el fin de hacer frente a este error, ¿cómo puedo comprobar valores NULL?

que esperaba que esto sería volver TRUE, pero me dieron un valor lógico vacío:

condition == NULL 
## logical(0) 
+0

use 'is.null' en lugar de' == ' –

Respuesta

37

Ver ?NULL

Usted tiene que usar is.null

'is.null' devuelve 'VERDADERO' si su argumento es 'NULO' y 'FALSO' en caso contrario.

Prueba esto:

if (is.null(hic.data[[z]])) { print("is null")} 

De la sección 2.1.6 del R Language Definition

Hay un objeto especial llamado NULL. Se utiliza siempre que sea necesario indicar o especificar que un objeto está ausente. No se debe confundir con un vector o lista de longitud cero. El objeto NULL no tiene ningún tipo ni propiedades modificables. Solo hay un objeto NULL en R, al que se refieren todas las instancias. Para probar el uso NULL es.null. No puede establecer los atributos en NULL.

4

Al probar valores NULOS, desea utilizar is.null(hic.data[[z]]).

12

¿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.

Cuestiones relacionadas