Come risolvere in r: l'argomento ha lunghezza zero


Un messaggio di errore che potresti riscontrare quando usi R è:

 Error in if (x < 10) {: argument is of length zero

Questo errore si verifica in genere quando si tenta di eseguire un confronto logico in un’istruzione if in R, ma la variabile utilizzata nel confronto ha lunghezza zero.

Due esempi di variabili di lunghezza zero sono numeric() o Character(0) .

L’esempio seguente mostra come risolvere questo errore nella pratica.

Come riprodurre l’errore

Supponiamo di creare la seguente variabile numerica in R con lunghezza zero:

 #create numeric variable with length of zero
x <- numeric()

Supponiamo ora di provare a utilizzare questa variabile in un’istruzione if:

 #if x is less than 10, print x to console
if(x < 10 ) {
  x
}

Error in if (x < 10) {: argument is of length zero

Riceviamo un errore perché la variabile che definiamo ha lunghezza zero.

Se creassimo semplicemente una variabile numerica con un valore reale, non riceveremmo mai questo errore quando utilizziamo l’istruzione if:

 #create numeric variable
y <- 5

#if y is less than 10, print y to console
if(y < 10 ) {
  y
}

[1] 5

Come evitare l’errore

Per evitare l’errore di lunghezza dell’argomento pari a zero , dobbiamo includere una funzione isTRUE , che utilizza la seguente logica:

 is. logical (x) && length(x) == 1 && !is. na (x) && x

Se usiamo questa funzione nell’istruzione if, non riceveremo un errore quando confrontiamo la nostra variabile con un valore:

 if(isTRUE(x) && x < 10 ) {
  x
}

Invece di ricevere un errore, semplicemente non riceviamo alcun output perché la funzione isTRUE(x) restituisce FALSE , il che significa che il valore di x non viene mai stampato.

Risorse addizionali

I seguenti tutorial spiegano come correggere altri errori comuni in R:

Come risolvere in R: gli argomenti coinvolgono un numero diverso di righe
Come risolvere in R: errore nella selezione di argomenti inutilizzati
Come riparare in R: la sostituzione ha lunghezza zero

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *