R für Dummies. Andrie de Vries
Sie die Variable wieder laden. Geben Sie
load
gefolgt vom Dateinamen der Variablen ein, in unserem Beispiel:
> load("deinname.rda")
Jetzt ist deinname
auch wieder mit ls()
oder in RStudio im Arbeitsbereichsfenster sichtbar. RStudio zeigt zusätzlich den Inhalt an.
Kapitel 3
Die Grundlagen von R
IN DIESEM KAPITEL
Funktionen und Argumente verwenden
Klaren und lesbaren Code schreiben
R mit Paketen erweitern
Bevor Sie R auf Ihre Daten loslassen, brauchen Sie noch ein paar grundlegende Informationen über R.
In Kapitel 2 zeigen wir Ihnen, wie Sie die Eingabezeile verwenden und wie Sie mit dem Arbeitsbereich umgehen. Wenn Sie das Kapitel gelesen haben, können Sie ein einfaches Skript schreiben und die Funktionen print
()
, paste()
und readline()
zu Ihrem Vorteil einsetzen – zumindest in der einfachsten Version. Dass Funktionen in R jedoch weit mehr können, zeigen wir Ihnen in diesem Kapitel.
Je mehr Argumente Sie in Ihren Funktionen verwenden und je mehr Funktionen Sie kennen und einsetzen, desto komplexer werden Ihre Skripte. Das ist gut so. Weniger gut wäre es, wenn Sie sich darin nicht mehr zurechtfinden oder Dritte mit Ihrem Code in den Wahnsinn treiben. Um das zu vermeiden, bieten sich ein paar einfache organisatorische Grundsätze an, die wir Ihnen in diesem Kapitel vorstellen.
Zu guter Letzt zeigen wir Ihnen, wie Sie bei Ihrer Arbeit nicht jedes Mal das Rad neu erfinden müssen. Verwenden Sie einfach Pakete, die von äußerst versierten Mitgliedern der R-Gemeinde entwickelt wurden und häufig sehr gut auf Ihre jeweilige Problemstellung passen. Die Zahl der beitragenden Entwickler geht in die Hunderte. In diesem Kapitel zeigen wir Ihnen, wo Sie solche Pakete finden und wie Sie sie einsetzen.
Die ganze Power von Funktionen ausschöpfen
Für alles, was Sie in R machen wollen, verwenden Sie Funktionen. In diesem Abschnitt zeigen wir Ihnen, wie Sie Funktionen geschickt einsetzen. Zunächst gehen wir auf vektorwertige Funktionen ein. Diese arbeiten mit Vektoren von Werten gleichzeitig und nicht nur mit einzelnen Elementen. Anschließend bringen wir Argumente vor, dass Sie Funktionen noch mehr ausreizen, wenn Sie mit Argumenten arbeiten. Zum Schluss zeigen wir Ihnen, wie Sie die Historie aller während der Sitzung ausgeführten Anweisungen speichern können. Dazu verwenden Sie – wie könnte es anders sein – auch eine Funktion.
Vektorwertige Funktionen verwenden
Vektorwertige Funktionen sind eine sehr hilfreiche Einrichtung von R. Leider haben Programmierer, die von anderen Sprachen kommen, zunächst Schwierigkeiten damit. Eine vektorwertige Funktion manipuliert nicht nur eine einzige Eingangsgröße, sondern gleich einen ganzen Vektor. Der erste Impuls geht bei vielen Programmierern dahin, eine Schleife zu programmieren, die die Elemente des Vektors einzeln bearbeitet. Widerstehen Sie dieser Versuchung und vertrauen Sie uns! Mit vektorwertigen Funktionen geht alles viel einfacher – und Ihr Code wird schöner.
Um vektorwertige Funktionen ausprobieren zu können, benötigen Sie zunächst einmal einen Vektor. Dazu verwenden Sie die Funktion c()
(von englisch combine = verketten). Die einzelnen Elemente trennen Sie durch Kommata.
Sehen wir uns ein Beispiel an. Nehmen wir an, Oma spielt mit ihrer Freundin Margarete Basketball und Sie schreiben sich die Körbe von Oma in jedem Spiel auf. Nach sechs Spielen wollen Sie wissen, wie viele Körbe Oma in dieser Saison bereits geworfen hat. Die Körbe pro Spiel können Sie in einem Vektor zusammenfassen:
> 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 5 erfahren 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
,