Accéder au contenu principal

Comment corriger l'erreur "Argument non numérique d'un opérateur binaire" dans R ?

L'erreur de l'argument non numérique de l'opérateur binaire dans R se produit lorsque vous essayez de faire de l'arithmétique sur des données non numériques, comme une chaîne de caractères ou un facteur.
Actualisé 14 nov. 2024  · 8 min de lecture

Vous avez peut-être rencontré cette erreur en programmant dans R : Error: non-numeric argument to binary operator. Cela peut se produire lors de l'exécution d'une opération mathématique sur des données contenant des valeurs non numériques, telles que des chaînes ou des caractères.

Dans ce tutoriel, je vous expliquerai comment résoudre cette erreur. Je vais d'abord vous donner une brève réponse, puis j'approfondirai la question afin que vous puissiez mieux comprendre pourquoi cette erreur se produit.

La réponse courte : Comment corriger l'erreur "Argument non numérique d'un opérateur binaire" dans R ?

Pour les plus pressés, la correction de l'erreur de l'argument non numérique de l'opérateur binaire dans R consiste à convertir les données en types numériques avant d'effectuer les opérations arithmétiques. Cette méthode permet de s'assurer que tous les éléments de vos données se prêtent à des calculs mathématiques.

Dans l'exemple suivant, la fonction as.numeric() convertit directement le tableau characters en tableau numérique, ce qui garantit que l'opération d'addition est effectuée sans erreur.

characters <- c("5", "10", "15")

characters <- as.numeric(characters)

result <- characters + 10

print(result)

Pourquoi l'erreur se produit-elle ?

Dans R, les opérations arithmétiques sont conçues pour fonctionner avec des types de données numériques. Lorsque vous rencontrez l'erreur "argument non numérique d'un opérateur binaire", cela indique généralement une mauvaise utilisation des opérateurs arithmétiques avec des types de données non numériques, tels que les chaînes de caractères ou les facteurs. Pour en savoir plus sur les types de données R, lisez notre tutoriel sur les types de données dans R.

Cela peut se produire dans plusieurs cas de figure :

  • Opérations sur les chaînes de caractères : L'erreur peut se produire lorsque vous essayez d'effectuer des opérations arithmétiques sur des données textuelles.
  • Opérations sur les types de données factorielles : L'erreur se produit lorsque R convertit des chaînes de caractères en facteurs dans des cadres de données, en particulier lors de l'importation de données, ce qui entraîne des types non numériques involontaires.
  • Opérations sur des listes ou d'autres structures complexes : L'erreur se produit également lors de l'utilisation d'opérateurs arithmétiques sur des listes ou des structures similaires inadaptées à de telles opérations.

Comment reproduire et corriger l'erreur

Créons un simple jeu de données et effectuons des opérations qui déclencheront intentionnellement cette erreur afin d'illustrer comment elle peut se produire. Dans chaque cas, nous corrigerons l'erreur.

Comment reproduire et corriger l'erreur pour les chaînes de caractères ?

Dans notre premier exemple, nous obtenons ce message d'erreur parce que les éléments du vecteur characters ne sont pas de type numérique mais sont des chaînes de caractères.

characters <- c("5", "10", "15")

result <- characters + 10

print(result)

Pour remédier à ce problème, nous convertissons les données en données numériques en utilisant as.numeric():

characters <- c("5", "10", "15")

characters <- as.numeric(characters)

result <- characters + 10

print(result)

Comment reproduire et corriger l'erreur pour les facteurs

Dans notre prochain exemple, nous reproduirons l'erreur pour les facteurs.

factors <- factor(c("5", "10", "15"))

result <- factors + 10

print(result)

Pour remédier à ce problème, nous convertissons d'abord les caractères en chiffres. Nous procédons ainsi car, dans R, les facteurs sont stockés sous forme de vecteurs entiers avec un ensemble correspondant de niveaux de caractères.

Lorsque vous convertissez un facteur directement en numérique à l'aide de as.numeric(), R renvoie les codes entiers sous-jacents, c'est-à-dire la représentation entière interne des niveaux du facteur, au lieu des valeurs de caractères réelles. La conversion du facteur en caractère permet d'abord de récupérer les niveaux réels sous forme de chaînes de caractères, qui peuvent ensuite être correctement converties en valeurs numériques.

factors <- factor(c("5", "10", "15"))

factors <- as.numeric(as.character(factors))

result <- factors + 10

print(result)

Comment reproduire et corriger l'erreur pour les listes

Dans notre prochain exemple, nous reproduirons l'erreur pour les listes. 

list_data <- list("5", "10", "15")

result <- list_data + 10

print(result)

Pour y remédier, nous extrayons et convertissons les éléments en valeurs numériques. La fonction unlist() convertit la liste en un vecteur. 

list_data <- list("5", "10", "15")

list_data <- as.numeric(unlist(list_data))

result <- list_data + 10

print(result)

Comment reproduire et corriger l'erreur pour les types de données mixtes ?

L'exemple suivant est un peu plus compliqué. Aucune de nos techniques précédentes ne fonctionnerait dans ce cas, car nous rencontrerions "20a" qui ne peut pas être converti en valeur numérique. 

La fonction sapply() offre une bonne solution dans ce cas. Il applique une fonction spécifiée à chaque élément de notre vecteur. Dans notre cas, nous définissons une fonction qui tente de convertir chaque élément en une valeur numérique.

mixed_data <- list("5", 10, "15", "20a")

numeric_data <- sapply(mixed_data, function(x) {
  if (is.numeric(x)) {
    return(x)
  } else if (!is.na(as.numeric(x))) {
    return(as.numeric(x))
  } else {
    return(NA)
  }
})

result <- numeric_data + 10

print(result)

Pour plus d'informations sur la programmation fonctionnelle dans R, consultez notre cours Intermediate Functional Programming with purrr. Pour en savoir plus sur la famille de fonctions apply(), lisez notre tutoriel sur la famille R Apply. 

Autres éléments à connaître

Débogage avec traceback

Lorsqu'une erreur se produit, traceback() peut être un outil précieux pour le débogage. Il fournit une séquence d'appels qui ont conduit à l'erreur, ce qui vous aide à identifier le point exact de la défaillance.

traceback()

Après avoir exécuté cette commande, R imprimera la séquence d'appels de fonction qui a conduit à l'erreur. Cela peut permettre de savoir où les données non numériques ont pu être introduites.

Examiner les méthodes de saisie des données

Vous pouvez également vérifier la façon dont les données sont importées et vous assurer qu'elles sont converties correctement. Lors de l'importation de données, en particulier à partir de fichiers CSV, R peut automatiquement convertir les données de caractères en facteurs. Il est important de contrôler ce comportement pour s'assurer que vos données sont importées correctement.

# Assuming data is read from a CSV incorrectly imported as factors
data <- read.csv("data.csv", stringsAsFactors = TRUE)

data$column <- as.numeric(as.character(data$column))

Dans cet exemple, les données sont importées d'un fichier CSV avec stringsAsFactors réglé sur TRUE. Nous convertissons ensuite la colonne des facteurs en caractère, puis en numérique, afin de garantir le type de données approprié pour les opérations arithmétiques.

Comment éviter l'erreur

Utilisation de contrôles conditionnels

Pour éviter que cette erreur ne se produise, essayez de mettre en œuvre des contrôles conditionnels afin de vous assurer que les types de données sont adaptés aux opérations. La vérification du type de données et le traitement conditionnel des conversions nécessaires constituent une bonne pratique avant d'effectuer des opérations.

Dans l'exemple suivant, nous vérifions si les données sont numériques. Si ce n'est pas le cas, nous le convertissons en numérique avant de procéder à l'opération arithmétique. Cette fonction permet de détecter les types de données erronés et de les convertir en données numériques. 

data <- "20"

if(is.numeric(data)) {
  result <- data + 10
} else {
  data <- as.numeric(data)
  result <- data + 10
}

print(result)

exemple de contrôle conditionnel

Conclusion et ressources complémentaires

J'espère que cet article vous a aidé à résoudre votre problème. Les erreurs telles que l'erreur de l'argument non numérique de l'opérateur binaire sont courantes en programmation, et il est important de savoir comment les traiter. La compréhension des types de données et des conversions appropriées peut aider à éviter cette erreur.

Pour vous aider avec R, vous pouvez consulter nos antisèches R ou notre cours gratuit Introduction à R ou, pour une compréhension plus approfondie, essayer notre cursus de compétences en programmation R.


Photo of Austin Chia
Author
Austin Chia
LinkedIn

Je m'appelle Austin, je suis blogueur et rédacteur technique et j'ai des années d'expérience en tant que data scientist et data analyst dans le domaine de la santé. J'ai commencé mon parcours technologique avec une formation en biologie et j'aide maintenant les autres à faire la même transition grâce à mon blog technologique. Ma passion pour la technologie m'a conduit à écrire pour des dizaines d'entreprises SaaS, inspirant les autres et partageant mes expériences.

Questions fréquemment posées

Qu'est-ce qu'un argument non numérique ?

Un argument non numérique est une valeur ou une variable qui ne peut pas être interprétée comme un nombre dans un langage de programmation tel que R.

Comment puis-je repérer cette erreur dans mon code ?

Le message d'erreur comprend généralement la phrase "argument non numérique", ce qui permet de l'identifier facilement.

Cette erreur ne se produit-elle qu'avec R ?

Non, cette erreur peut également se produire dans d'autres langages de programmation. Toutefois, le message d'erreur peut apparaître différemment.

Existe-t-il un moyen d'éviter cette erreur ?

Oui, en vous assurant que toutes les valeurs et variables de votre code sont compatibles avec l'opérateur spécifique utilisé.

Puis-je utiliser n'importe quel type d'opérateur avec des arguments non numériques ?

Non, certains opérateurs ne peuvent être utilisés qu'avec des valeurs numériques et produiront cette erreur s'ils reçoivent des arguments non numériques.

Sujets

Apprenez R avec DataCamp

Certification disponible

cours

Introduction à R

4 hr
2.7M
Maîtrisez les bases de l'analyse de données en R, y compris les vecteurs, les listes et les cadres de données, et pratiquez R avec des ensembles de données réels.
Afficher les détailsRight Arrow
Commencer Le Cours
Voir plusRight Arrow