Hoe op te lossen in r: argument is noch numeriek noch logisch: return na


Een waarschuwing die u in R kunt tegenkomen is:

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

Deze waarschuwing treedt op wanneer u probeert een object in R te middelen dat noch numeriek noch logisch is.

In deze tutorial wordt precies uitgelegd hoe u in de praktijk met deze waarschuwing omgaat.

Hoe de waarschuwing te reproduceren

Stel dat we het volgende dataframe in R creëren:

 #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

Als we proberen het gemiddelde van een kolom met tekens te berekenen of als we het hele dataframe proberen te middelen, krijgen we een waarschuwing:

 #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

De functie Mean() neemt alleen een numerieke vector als argument, en daarom krijgen we in beide scenario’s een waarschuwing.

Hoe om te gaan met de waarschuwing

De manier om met deze waarschuwing om te gaan is door de functie Mean() alleen te gebruiken met numerieke vectoren.

We kunnen bijvoorbeeld het gemiddelde van de puntenkolom berekenen, omdat deze numeriek is:

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

[1] 91.6

Of we kunnen de functie sapply() gebruiken om het gemiddelde van elke kolom in het dataframe te berekenen:

 #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

We kunnen het gemiddelde van elke numerieke kolom berekenen, maar ontvangen nog steeds een waarschuwingsbericht omdat we hebben geprobeerd het gemiddelde van de tekenkolom „team“ te berekenen.

Om deze waarschuwing volledig te vermijden, kunnen we de functie sapply() gebruiken met alleen de drie numerieke kolommen:

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

Houd er rekening mee dat het gemiddelde van elke numerieke kolom succesvol wordt weergegeven en dat we geen waarschuwingsberichten ontvangen.

Aanvullende bronnen

In de volgende tutorials wordt uitgelegd hoe u andere veelvoorkomende fouten in R kunt oplossen:

Oplossing: voorwaarde heeft lengte > 1 en alleen het eerste element wordt gebruikt
Oplossing: niet-numeriek argument van binaire operator
Oplossing: dim(X) moet een positieve lengte hebben
Oplossing: fout bij het selecteren van ongebruikte argumenten

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert