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