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