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

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *