Zuweisungen in R werden üblicherweise mit dem Zuweisungs-Operator <- ausgeführt:
a <- 3 a [1] 3
Manchen Anwendern mag das Gleichheitszeichen vertrauter sein – es funktioniert ebenfalls:
a = 4 a [1] 4
Parameter-Übergabe mit Gleichheitszeichen: na.rm = TRUE
Bis vor kurzem dachte ich noch, der Zuweisungspfeil wäre eben üblich in R – konnte aber nicht sagen, inwiefern sich seine Funktion vom Gleichzeitszeichen unterscheidet.
Bei Funktionsaufrufen werden Parameter mit dem Gleichheitszeichen übergeben, etwa so:
mean(a, na.rm = TRUE)
Hier teilen wir R mit, dass etwaige Fehlwerte im Vektor a ignoriert werden sollen, sodass der Mittelwert aus den gültigen Werten errechnet wird. Damit wird die strenge Voreinstellung (na.rm = FALSE) überschrieben, bei der R einen Fehlwert als Ergebnis liefert, sobald auch nur ein Fehlwert in a vorliegt.
Gibt es Situationen, in denen sich diese beiden Möglichkeiten (<- und =) unterscheiden?
Tatsächlich gibt es Situationen, in denen der Zuweisungspfeil funktioniert, das Gleichheitszeichen aber nicht:
wurzel <- function(n) sqrt(1:n) system.time(result <- wurzel(5e6)) User System verstrichen 0.03 0.03 0.06
Zunächst definieren wir die Funktion wurzel, die für alle Zahlen von 1 bis n die Wurzel errechnet, wobei n im Funktionsaufruf anzugeben ist.
In diesem Beispiel wird ein Objekt „result“ gebildet, das die Wurzel der Zahlen von 1 bis 5 Millionen enthält (5e6 = 5 000 000). Dazu wird der Zeitbedarf ermittelt.
Hier scheitert die Variante mit dem Gleichheitszeichen:
system.time(result = wurzel(5e6)) Error in system.time(result = wurzel(5e+06)) : unused argument (result = wurzel(5e+06))
Warum ist das so? Hier wird das Gleichheitszeichen als Kennzeichen einer Parameter-Übergabe aufgefasst. Die system.time-Funktion kennt jedoch keinen Parameter namens result. Beim Zuweisungspfeil im oberen Beispiel versteht R hingegen, dass result kein Parameter ist, sondern ein neu zu bildendes Objekt.
Ergo: Es ist sinnvoll, Zuweisungspfeile und Gleichheitszeichen auseinander zu halten.