Comment réparer dans R : l’argument n’est ni numérique ni logique : renvoyer na
Un avertissement que vous pouvez rencontrer dans R est :
Warning message: In mean.default(df) : argument is not numeric or logical: returning NA
Cet avertissement se produit lorsque vous tentez de calculer la moyenne d’un objet dans R qui n’est ni numérique ni logique.
Ce didacticiel explique exactement comment gérer cet avertissement dans la pratique.
Comment reproduire l’avertissement
Supposons que nous créions le bloc de données suivant dans 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
Si nous essayons de calculer la moyenne d’une colonne de caractères ou si nous essayons de calculer la moyenne de l’ensemble du bloc de données, nous recevrons un avertissement :
#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 fonction Mean() ne prend qu’un vecteur numérique comme argument, ce qui explique pourquoi nous recevons un avertissement dans les deux scénarios.
Comment gérer l’avertissement
La façon de gérer cet avertissement consiste à utiliser uniquement la fonction Mean() avec des vecteurs numériques.
Par exemple, nous pourrions calculer la moyenne de la colonne des points puisqu’elle est numérique :
#calculate mean of points column
mean(df$points)
[1] 91.6
Ou nous pourrions utiliser la fonction sapply() pour calculer la moyenne de chaque colonne du bloc de données :
#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
Nous sommes capables de calculer la moyenne de chaque colonne numérique, mais recevons toujours un message d’avertissement puisque nous avons tenté de calculer la moyenne de la colonne de caractères « équipe ».
Pour éviter complètement cet avertissement, nous pourrions utiliser la fonction sapply() avec uniquement les trois colonnes numériques :
#calculate mean of each numeric column
sapply(df[c('points', 'assists', 'rebounds')], mean, 2)
points assists rebounds
90 33 28
Notez que la moyenne de chaque colonne numérique est affichée avec succès et que nous ne recevons aucun message d’avertissement.
Ressources additionnelles
Les didacticiels suivants expliquent comment corriger d’autres erreurs courantes dans R :
Comment réparer : la condition a une longueur > 1 et seul le premier élément sera utilisé
Comment réparer : argument non numérique de l’opérateur binaire
Comment réparer : dim(X) doit avoir une longueur positive
Comment réparer : erreur dans la sélection des arguments inutilisés