> koerbe.von.Oma <- c(12, 4, 4, 6, 9, 3)
> koerbe.von.Oma
[1] 12 4 4 6 9 3
Um jetzt die Gesamtzahl der von Oma geworfenen Körbe zu ermitteln, geben Sie ein:
> sum(koerbe.von.Oma)
[1] 38
Natürlich würden Sie dasselbe Ergebnis erhalten, wenn Sie den Vektor Element für Element durchgehen und dabei jedes neue Element zur Summe der bereits abgearbeiteten Elemente hinzufügen. Dies wäre jedoch deutlich aufwendiger, würde mehr Code erfordern und die Berechnung würde länger dauern. Bei sechs Elementen wäre das sicher noch kein Beinbruch, aber bei ein paar Tausend schon.
Tatsächlich gibt es diese Art von Vektorisierung in vielen Programmiersprachen. Funktionen, die auf diese Art arbeiten, summieren die Elemente eines Vektors auf; sie nehmen alle Werte des Vektors und berechnen ein Ergebnis.
Auch kann R Funktionen mit Vektoren kombinieren. Diese Art von Vektorisierung ist ziemlich einzigartig und wesentlicher Bestandteil der unglaublichen Macht von R als Sprache. Ziemlich viele Menschen haben beim Verständnis dieses Konzepts anfangs Probleme, dies ändert sich jedoch ziemlich schnell, wenn sie das Ganze selbst umsetzen.
Nehmen wir zum Beispiel die Funktion paste()
, der Sie im letzten Kapitel schon begegnet sind. Zunächst erschaffen Sie zwei Vektoren (zum Beispiel einen mit den Vornamen und einen mit den Nachnamen). Dann können Sie mit der Funktion paste()
beide kombinieren.
> vornamen <- c("Andrie", "Joris")
> nachnamen <- c("de Vries", "Meys")
> paste(vornamen, nachnamen)
[1] "Andrie de Vries" "Joris Meys"
Angenommen, die Mitglieder Ihrer Familie tragen denselben Nachnamen. Dann können wir diesen mithilfe von paste()
allen Vornamen gleichzeitig hinzufügen. Probieren wir es aus (dieses Buch führt gleichzeitig zum Diplom in belgischer Namenskunde):
> vornamen <- c("Joris", "Carolien", "Koen")
> nachname <- "Meys"
> paste(vornamen,nachname)
[1] "Joris Meys" "Carolien Meys" "Koen Meys"
Wie Sie sehen, nimmt R den Vektor vornamen
und klebt den Inhalt der Variablen nachname
an jedes Element von vornamen
dran. Das ist doch wirklich klasse, oder?
Hinter den Kulissen kombiniert R zwei Vektoren. In unserem Beispiel hat der zweite Vektor nur ein Element. Damit R die beiden Vektoren elementweise zusammenfügen kann, wird von paste()
der zweite Vektor einfach so lange wiederholt, bis beide die gleiche Zahl an Elementen haben. Passenderweise nennt man das Recycling (mehr dazu finden Sie in Kapitel 4).
Das sieht nicht wirklich kompliziert aus, oder? Alles, was Sie brauchen, sind zwei Vektoren, die Sie in die Funktion stecken, also diese als Argumente übergeben. In Kapitel 5erfahren Sie mehr zu paste()
.
Argumente an Funktionen übergeben
Den meisten Funktionen in R können Sie mithilfe von zusätzlichen Argumenten weitere Hinweise für die Ausführung geben. Wenn Sie print("Hallo Welt!")
eingeben, weisen Sie dem ersten Argument x
der Funktion print()
den Wert "Hallo Welt!"
zu. Dass das erste Argument der Funktion tatsächlich x
heißt und nicht etwa y
, können Sie selbst in der Hilfe zur Funktion print()
nachschlagen (zum Beispiel mit ?print()
).
In R gibt es zwei grundlegend verschiedene Typen von Argumenten:
Argumente mit Standardwerten
Argumente ohne Standardwerte
Wenn ein Argument keinen Standardwert hat, kann es entweder erforderlich oder optional sein. Das erste Argument ist fast immer erforderlich. Probieren Sie mal Folgendes:
> print()
R beschwert sich, dass das Argument x
fehlt:
Fehler in print.default() : Argument "x" fehlt (ohne Standardwert)
Sie können den Namen des Arguments auch explizit übergeben:
> print(x = "Ist das nicht lustig?")
Na ja – lustig oder nicht –, es funktioniert jedenfalls. Aber warum kann man den Bezeichner, das x
, einfach weglassen, wie oben bereits mehrmals geschehen? Das liegt daran, dass R auf die Bezeichner verzichten kann, wenn Sie die Reihenfolge der Argumente (siehe Hilfe) genau einhalten. Die Funktion print()
hat nur ein erforderliches Argument, daher kann R hier auch nicht durcheinanderkommen. Was die Hilfeseiten noch an Informationen für Sie bereithalten, lesen Sie in Kapitel 11.
Wenn Sie die Argumente von Funktionen genau in der Reihenfolge übergeben, wie es in den Hilfeseiten steht, können Sie die Bezeichner weglassen. Umgekehrt können Sie die Reihenfolge beliebig wählen, wenn Sie alle Bezeichner mit angeben.
Probieren Sie mal folgendes Beispiel aus:
> print(digits = 4, x = 11/7)
[1] 1.571
Moment mal, von einem Argument namens digits
war in den Hilfeseiten über print()
doch nie die Rede! Hier ist die Lösung. Da hatte sich nicht print()
beschwert, sondern print.default()
. Offenbar ist für einfache »Hallo Welt!«-Argumente oder Zahlen die Funktion print.default()
zuständig. Rufen wir die Hilfeseite für print.default()
auf, ist die Welt wieder in Ordnung: Das Argument namens digits
wird beschrieben.
Die Funktion print()
ist eine generische Funktion . Sie sieht sich zunächst den Typ des Objekts an, das als Argument übergeben wurde. Dann entscheidet sie, welche Funktion zur Ausführung der Aufgabe ausgewählt wird. Diese Funktion heißt Methode und ist Bestandteil des übergebenen Objekts. Mehrere Objekte können sich eine Methode teilen, wenn diese nicht mit einer speziellen, nur für das Objekt bestimmten Methode überschrieben wurde. Diese Methode nennt man Standardmethode (englisch default ). In unserem Fall handelt es sich um die Methode print.default()
. Es gibt auch Objekte, für die R keine Standardmethode hat. Darüber lesen Sie mehr in Kapitel 8.Für den Moment genügt es, wenn Sie im Hinterkopf behalten, dass die benötigten Argumente für eine Funktion manchmal über mehrere Hilfeseiten verstreut sein können.
Wenn Sie vergessen haben, welche Argumente Sie für Ihre Funktion verwenden können, schauen Sie bitte auch auf die Hilfeseiten der für das gewünschte Argument zuständigen Methode. Meist finden Sie Hinweise zu zuständigen Methoden am Ende der Hilfeseite. Um die Hilfe der paste()
-Funktion aufzurufen, tippen Sie ?paste
in Ihre Konsole.
Historienschreiber werden
Standardmäßig merkt sich R alle Anweisungen, die Sie während einer Sitzung ausführen lassen. Das kann sich als sehr nützlich erweisen, wenn Sie eine Anweisung noch mal ausführen wollen oder sich einen Überblick verschaffen möchten, was Sie bisher schon gemacht haben .
Sie können die Historie einsehen, wenn Sie in der Eingabezeile auf der Tastatur die Taste
oder
drücken. Dabei bewegen Sie sich mit der Taste
immer weiter in die Vergangenheit. Jede Anweisung, die Sie gerade in der Eingabezeile sehen, können Sie mit der
-Taste ausführen lassen.
Читать дальше