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

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *