Jak naprawić w r: argument nie jest ani numeryczny, ani logiczny: return na
Ostrzeżenie, które możesz napotkać w R, to:
Warning message: In mean.default(df): argument is not numeric or logical: returning NA
To ostrzeżenie pojawia się podczas próby uśrednienia obiektu w języku R, który nie jest ani numeryczny, ani logiczny.
W tym samouczku dokładnie wyjaśniono, jak w praktyce postępować z tym ostrzeżeniem.
Jak odtworzyć ostrzeżenie
Załóżmy, że tworzymy następującą ramkę danych w 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
Jeśli spróbujemy uśrednić kolumnę znaków lub spróbujemy uśrednić całą ramkę danych, otrzymamy ostrzeżenie:
#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
Funkcja Mean() jako argument przyjmuje jedynie wektor liczbowy, dlatego w obu scenariuszach pojawia się ostrzeżenie.
Jak postępować z ostrzeżeniem
Sposób obsługi tego ostrzeżenia polega na użyciu funkcji Mean() wyłącznie z wektorami numerycznymi.
Na przykład możemy obliczyć średnią z kolumny punktów, ponieważ jest ona liczbowa:
#calculate mean of points column
mean(df$points)
[1] 91.6
Możemy też użyć funkcji sapply() do obliczenia średniej z każdej kolumny w ramce danych:
#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
Jesteśmy w stanie obliczyć średnią z każdej kolumny liczbowej, ale mimo to pojawia się komunikat ostrzegawczy, ponieważ próbowaliśmy obliczyć średnią z kolumny postaci „zespołowej”.
Aby całkowicie uniknąć tego ostrzeżenia, moglibyśmy użyć funkcji sapply() tylko z trzema kolumnami numerycznymi:
#calculate mean of each numeric column
sapply(df[c(' points ', ' assists ', ' rebounds ')], mean, 2)
points assists rebounds
90 33 28
Należy pamiętać, że średnia z każdej kolumny liczbowej została pomyślnie wyświetlona i nie otrzymujemy żadnych komunikatów ostrzegawczych.
Dodatkowe zasoby
Poniższe samouczki wyjaśniają, jak naprawić inne typowe błędy w R:
Jak naprawić: warunek ma długość > 1 i zostanie użyty tylko pierwszy element
Jak naprawić: nienumeryczny argument operatora binarnego
Jak naprawić: dim(X) musi mieć dodatnią długość
Jak naprawić: błąd podczas wybierania nieużywanych argumentów