Direkt zum Inhalt

So behebst du den Fehler "Nicht-numerisches Argument für binären Operator" in R

Der Fehler "Nicht-numerisches Argument zu binärem Operator" tritt in R auf, wenn du versuchst, mit nicht-numerischen Daten zu rechnen, z. B. mit einer Zeichenkette oder einem Faktor.
Aktualisierte 15. Jan. 2025  · 8 Min. Lesezeit

Vielleicht bist du beim Programmieren in R auf diesen Fehler gestoßen: Error: non-numeric argument to binary operator. Das kann vorkommen, wenn du eine mathematische Operation mit Daten durchführst, die nicht-numerische Werte enthalten, z. B. Zeichenketten oder Zeichen.

In diesem Tutorial zeige ich dir, wie du diesen Fehler angehen und beheben kannst. Ich werde zunächst eine kurze Antwort geben und dann tiefer eintauchen, damit du besser verstehen kannst, warum dieser Fehler auftritt.

Die kurze Antwort: So behebst du den Fehler "Nicht-numerisches Argument für binären Operator" in R

Wenn du es eilig hast, kannst du den Fehler "Nicht-numerisches Argument zu binärem Operator" in R beheben, indem du die Daten in numerische Typen konvertierst, bevor du arithmetische Operationen durchführst. Diese Methode stellt sicher, dass alle Elemente in deinen Daten für mathematische Berechnungen geeignet sind.

Im folgenden Beispiel wandelt die Funktion as.numeric() den Vektor characters direkt in einen numerischen Wert um und stellt so sicher, dass die Addition ohne Fehler durchgeführt wird .

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

characters <- as.numeric(characters)

result <- characters + 10

print(result)

Warum der Fehler auftritt

In R sind die arithmetischen Operationen auf numerische Datentypen ausgelegt. Wenn der Fehler "Nicht-numerisches Argument für binären Operator" auftritt, deutet dies in der Regel auf eine falsche Verwendung von arithmetischen Operatoren mit nicht-numerischen Datentypen wie Strings oder Faktoren hin. Mehr über R-Datentypen erfährst du in unserem Tutorial zu Datentypen in R.

Dies kann in mehreren gängigen Szenarien vorkommen:

  • Operationen auf Zeichenketten: Der Fehler kann auftreten, wenn du versuchst, eine Arithmetik mit Textdaten durchzuführen.
  • Operationen auf Faktordatentypen: Der Fehler tritt auf, wenn R Strings in Faktoren innerhalb von Datenrahmen konvertiert, insbesondere beim Importieren von Daten, was zu unbeabsichtigten nicht-numerischen Typen führt.
  • Operationen auf Listen oder anderen komplexen Strukturen: Der Fehler tritt auch auf, wenn du arithmetische Operatoren auf Listen oder ähnliche Strukturen anwendest, die für solche Operationen nicht geeignet sind.

So reproduzierst du den Fehler und behebst ihn

Erstellen wir einen einfachen Datensatz und führen wir Operationen durch, die diesen Fehler absichtlich auslösen, um zu zeigen, wie er auftreten kann. Wir werden den Fehler dann in jedem Fall beheben.

Wie man den Fehler bei Zeichenketten reproduziert und behebt

In unserem ersten Beispiel sehen wir diese Fehlermeldung, weil die Elemente des characters Vektors nicht vom numerischen Typ sind, sondern Zeichenketten sind.

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

result <- characters + 10

print(result)

Um dies zu beheben, konvertieren wir mit as.numeric() in numerische Werte:

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

characters <- as.numeric(characters)

result <- characters + 10

print(result)

So reproduzieren und beheben Sie den Fehler für Faktoren

In unserem nächsten Beispiel werden wir den Fehler für Faktoren reproduzieren.

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

result <- factors + 10

print(result)

Um dies zu beheben, konvertieren wir zuerst in numerische Werte, indem wir sie in Zeichen umwandeln. Wir tun dies, weil in R Faktoren als ganzzahlige Vektoren mit einer entsprechenden Menge von Zeichenstufen gespeichert werden.

Wenn du einen Faktor mit as.numeric() direkt in eine numerische Zahl umwandelst, gibt R anstelle der tatsächlichen Zeichenwerte die zugrunde liegenden Integer-Codes zurück, also die interne ganzzahlige Darstellung der Faktorstufen. Wenn du den Faktor in ein Zeichen umwandelst, erhältst du zunächst die tatsächlichen Stufen als Zeichenketten, die dann korrekt in numerische Werte umgewandelt werden können.

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

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

result <- factors + 10

print(result)

So reproduzieren und beheben Sie den Fehler für Listen

In unserem nächsten Beispiel werden wir den Fehler für Listen reproduzieren. 

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

result <- list_data + 10

print(result)

Um dies zu beheben, extrahieren wir die Elemente und konvertieren sie in numerische Werte. Die Funktion unlist() wandelt die Liste in einen Vektor um. 

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

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

result <- list_data + 10

print(result)

Wie man den Fehler bei gemischten Datentypen reproduziert und behebt

Das nächste Beispiel ist ein bisschen komplizierter. Keine unserer bisherigen Techniken würde in diesem Fall funktionieren, weil wir auf "20a" stoßen würden, das nicht in einen numerischen Wert umgewandelt werden kann. 

Die Funktion sapply() bietet in diesem Fall eine gute Lösung. Sie wendet eine bestimmte Funktion auf jedes Element unseres Vektors an. In unserem Fall definieren wir eine Funktion, die versucht, jedes Element in einen numerischen Wert umzuwandeln.

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)

Weitere Informationen zur funktionalen Programmierung in R findest du in unserem Kurs Intermediate Functional Programming with purrr. Mehr über die Funktionen der apply() Familie erfährst du in unserem Tutorial über die R Apply Familie

Zusätzliche Dinge zu wissen

Debugging mit Traceback

Wenn ein Fehler auftritt, kann traceback() ein wertvolles Werkzeug zur Fehlersuche sein. Sie liefert eine Abfolge von Aufrufen, die zu dem Fehler geführt haben, und hilft dir, den genauen Fehlerpunkt zu identifizieren.

traceback()

Nachdem du diesen Befehl ausgeführt hast, gibt R die Abfolge der Funktionsaufrufe aus, die zu dem Fehler geführt haben. Dies kann Aufschluss darüber geben, woher die nicht numerischen Daten stammen könnten.

Überprüfung der Dateneingabemethoden

Du solltest auch überprüfen, wie die Daten importiert werden und sicherstellen, dass sie richtig konvertiert werden. Beim Importieren von Daten, insbesondere aus CSV-Dateien, kann R automatisch Zeichendaten in Faktoren umwandeln. Es ist wichtig, dieses Verhalten zu kontrollieren, um sicherzustellen, dass deine Daten korrekt importiert werden.

# 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))

In diesem Beispiel werden die Daten aus einer CSV-Datei importiert, wobei stringsAsFactors auf TRUE eingestellt ist. Dann konvertieren wir die Faktorspalte in ein Zeichen und anschließend in einen numerischen Wert, um den richtigen Datentyp für arithmetische Operationen sicherzustellen.

Wie du den Fehler vermeidest

Bedingte Prüfungen verwenden

Um diesen Fehler zu vermeiden, solltest du versuchen, bedingte Prüfungen zu implementieren, um sicherzustellen, dass die Datentypen für Operationen geeignet sind. Es ist eine gute Praxis, vor der Durchführung von Operationen den Datentyp zu prüfen und alle notwendigen Konvertierungen vorzunehmen.

Im folgenden Beispiel prüfen wir, ob die Daten numerisch sind. Wenn nicht, wandeln wir ihn in einen numerischen Wert um, bevor wir mit der arithmetischen Operation fortfahren. Dadurch werden falsche Datentypen abgefangen und entsprechend in numerisch umgewandelt. 

data <- "20"

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

print(result)

Beispiel für bedingte Prüfungen

Schlussfolgerung und zusätzliche Ressourcen

Ich hoffe, dieser Artikel hat dir geholfen, dein Problem zu lösen. Fehler wie der Fehler "Nicht numerisches Argument zu binärem Operator" kommen beim Programmieren häufig vor und es ist wichtig zu wissen, wie man damit umgeht. Ein Verständnis der Datentypen und der richtigen Konvertierung kann helfen, diesen Fehler zu vermeiden.

Um dich mit R vertraut zu machen, kannst du unsere R-Spickzettel oder unseren kostenlosen Kurs "Einführung in R" lesen oder für ein tieferes Verständnis unseren Lernpfad zur R-Programmierung ausprobieren.


Austin Chia's photo
Author
Austin Chia
LinkedIn

Ich bin Austin, ein Blogger und Tech-Autor mit jahrelanger Erfahrung als Datenwissenschaftler und Datenanalyst im Gesundheitswesen. Ich habe meine Reise in die Welt der Technik mit einem Hintergrund in Biologie begonnen und helfe jetzt anderen mit meinem Technik-Blog, den gleichen Weg einzuschlagen. Meine Leidenschaft für Technologie hat dazu geführt, dass ich für Dutzende von SaaS-Unternehmen schreibe, um andere zu inspirieren und meine Erfahrungen zu teilen.

Häufig gestellte Fragen

Was ist ein nicht-numerisches Argument?

Ein nicht-numerisches Argument ist ein Wert oder eine Variable, die in einer Programmiersprache wie R nicht als Zahl interpretiert werden kann.

Wie kann ich diesen Fehler in meinem Code erkennen?

Die Fehlermeldung enthält in der Regel den Ausdruck "nicht-numerisches Argument", so dass sie leicht zu identifizieren ist.

Tritt dieser Fehler nur in R auf?

Nein, dieser Fehler kann auch in anderen Programmiersprachen auftreten. Die Fehlermeldung kann aber auch anders aussehen.

Gibt es eine Möglichkeit, diesen Fehler ganz zu vermeiden?

Ja, indem du sicherstellst, dass alle Werte und Variablen in deinem Code mit dem jeweils verwendeten Operator kompatibel sind.

Kann ich jede Art von Operator mit nicht-numerischen Argumenten verwenden?

Nein, einige Operatoren können nur mit numerischen Werten verwendet werden und führen zu diesem Fehler, wenn sie nicht numerische Argumente erhalten.

Themen

R lernen mit DataCamp

Zertifizierung verfügbar

Kurs

Einführung in R

4 hr
2.8M
Beherrsche die Grundlagen der Datenanalyse in R, einschließlich Vektoren, Listen und Datenrahmen, und übe R mit echten Datensätzen.
Siehe DetailsRight Arrow
Kurs starten
Mehr anzeigenRight Arrow