Come risolvere in r: l'argomento non è né numerico né logico: return na


Un avviso che potresti incontrare in R è:

 Warning message:
In mean.default(df): argument is not numeric or logical: returning NA

Questo avviso si verifica quando si tenta di calcolare la media di un oggetto in R che non è né numerico né logico.

Questo tutorial spiega esattamente come gestire questo avviso nella pratica.

Come riprodurre l’avviso

Supponiamo di creare il seguente frame di dati in R:

 #create data frame
df <- data. frame (team=c('A', 'B', 'C', 'D', 'E'),
                 points=c(99, 90, 86, 88, 95),
                 assists=c(33, 28, 31, 39, 34),
                 rebounds=c(30, 28, 24, 24, 28))

#view data frame
df

  team points assists rebounds
1 A 99 33 30
2 B 90 28 28
3 C 86 31 24
4 D 88 39 24
5 E 95 34 28

Se proviamo a fare la media di una colonna di caratteri o se proviamo a fare la media dell’intero frame di dati, riceveremo un avviso:

 #attempt to calculate mean of character column
mean(df$team)

Warning message:
In mean.default(df$team): argument is not numeric or logical: returning NA

#attempt to calculate mean of entire data frame
mean(df)

Warning message:
In mean.default(df): argument is not numeric or logical: returning NA

La funzione Mean() accetta solo un vettore numerico come argomento, motivo per cui riceviamo un avviso in entrambi gli scenari.

Come gestire l’avviso

Il modo per gestire questo avviso è utilizzare solo la funzione Mean() con vettori numerici.

Ad esempio, potremmo calcolare la media della colonna dei punti poiché è numerica:

 #calculate mean of points column
mean(df$points)

[1] 91.6

Oppure potremmo usare la funzione sapply() per calcolare la media di ogni colonna nel data frame:

 #calculate mean of every column in data frame
sapply(df, mean, 2)

    team points assists rebounds 
      NA 90 33 28 

Warning message:
In mean.default(X[[i]], ...):
  argument is not numeric or logical: returning NA

Siamo in grado di calcolare la media di ciascuna colonna numerica, ma riceviamo comunque un messaggio di avviso poiché abbiamo tentato di calcolare la media della colonna di caratteri “squadra”.

Per evitare completamente questo avviso, potremmo usare la funzione sapply() con solo le tre colonne numeriche:

 #calculate mean of each numeric column
sapply(df[c(' points ', ' assists ', ' rebounds ')], mean, 2)
  points assists rebounds 
      90 33 28

Tieni presente che la media di ciascuna colonna numerica viene visualizzata correttamente e non riceviamo alcun messaggio di avviso.

Risorse addizionali

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

Come risolvere il problema: la condizione ha lunghezza > 1 e verrà utilizzato solo il primo elemento
Come risolvere: argomento non numerico dell’operatore binario
Come risolvere il problema: dim(X) deve avere una lunghezza positiva
Come risolvere: errore nella selezione degli argomenti non utilizzati

Aggiungi un commento

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