<- 1
x <- 2
y + y x
R Workflow: RStudio Projekte und Datensätze einlesen
Für ausführlichere Informationen zu den hier behandelten und vielen weiteren Themen, empfehlen wir das frei verfügbare Onlinebuch R for Data Science (2e) von Hadley Wickham, Mine Çetinkaya-Rundel und Garrett Grolemund.
R Workflow bisher
Im R Crash Course auf der RLernplattform der Methodengruppen Berlin hatten wir bisher in RStudio sowohl das Fenster mit der Console, als auch das Fenster für R Skripte verwendet. Ein R Skript ist eine Datei (z.B. mein-skript.R
), in der wir den Code für eine bestimmte Analyse speichern. Dieses Skript hatten wir als Datei irgendwo auf unserem Computer abgespeichert.
Der R Workspace
Workspace nicht speichern
Wenn wir in R arbeiten, erstellen wir dabei in der Regel verschiedene Objekte (z.B. x <- 42
), die dann in unserem Environment Fenster in RStudio angezeigt werden. Irgendwann sind wir für heute fertig mit unserer statistischen Analyse und wollen RStudio gerne schließen. Schließen wir RStudio, werden wir per default gefragt ob wir den Workspace, der alle unsere R Objekte aus dem Environment Fenster (und noch ein paar andere Sachen) enthält, speichern wollen.
Im Gegensatz zu unserem R Skript, wollen wir den Workspace (in 99% der Fälle) nicht speichern!
- Nur was in unserem R Skript steht ist reproduzierbar! Wenn wir zwischendurch in der R Console Dinge ausprobiert, in unserem Skript Befehle gelöscht oder angepasst haben, wissen wir nicht mehr genau, wie die Objekte im Environment zustande gekommen sind.
- Daher ist es gute Praxis sich selbst zu zwingen, dass alle speicherwürdigen Schritte im Skript enthalten sind und dass wir jedes mal wenn wir mit R arbeiten mit einer “frischen” Arbeitsumgebung starten.
Wenn wir RStudio das nächste mal öffnen und wir hätten beim Schließen den Workspace gespeichert, werden alle R Objekte vom letzten mal automatisch wieder geladen, was sehr häufig zu Problemen führt (auch wenn es auf den ersten Blick vielleicht praktisch erscheinen mag).
Workspace Einstellungen anpassen
Wir können in den Einstellungen von RStudio festlegen, dass…
- beim Öffnen kein Workspace geladen werden soll und
- beim Schließen von RStudio der Workspace nicht gespeichert wird und wir auch nicht mehr danach gefragt werden.
Dafür klicken wir in RStudio auf Tools > Global Options und wählen die in Abbildung 1 blau markierten Einstellungen aus.
ÜBUNG 1:
Passen Sie wie beschrieben die Workspace Einstellungen in RStudio an.
Erstellen Sie mindestens ein R Objekt, z.B. mit dem Befehl
x <- 10
. Schließen Sie RStudio und beobachten Sie, dass Sie nicht danach gefragt werden, ob Sie den Workspace speichern wollen (Wenn Sie Änderungen an einem R Skript vorgenommen haben, werden Sie immer trotzdem gefragt, ob Sie das Skript speichern wollen).Öffnen Sie RStudio erneut und überprüfen Sie, dass das zuvor erstellte R Objekt nicht mehr existiert. Sie können dafür entweder versuchen das Objekt anzuzeigen (z.B. mit dem Befehl
print(x)
) oder Sie versichern sich, dass das Environment Fenster in RStudio leer ist.
R im Hintergrund neu starten
Auch während wir in RStudio arbeiten ist es sinnvoll, regelmäßig R “zurückzusetzen” und eine “frische Arbeitsumgebung” zu schaffen. Damit wollen wir sicherzustellen, dass der Code in unserem R Skript wie erwartet funktioniert und wir alle wichtigen Analyseschritte auch wirklich reproduzieren können.
Anstatt RStudio aufwendig zu schließen und wieder neu zu öffnen, können wir stattdessen im Hintergrund R neu starten, indem wir in RStudio entweder…
- auf Session > Restart R klicken oder
- die Tastenkombination Cmd + Shift + 0 für Mac oder Ctrl + Shift + F10 für Windows verwenden.
Danach können wir entweder…
- unseren Code im Skript Schritt für Schritt manuell neu ausführen oder
- mit der Tasten kombination Cmd + Shift + S für Mac oder Ctrl + Shift + S für Windows das komplette aktuell geöffnete Skript ausführen.
Übung 2:
- Erstellen Sie ein neues R Skript das nur die folgenden drei Zeilen enthält:
Führen Sie die drei Befehle im Skript der Reihe nach aus.
Geben Sie direkt in der R Console den folgenden Befehl ein:
y <- x
Führen Sie die 3. Zeile des Skripts erneut aus und vergleichen Sie das Ergebnis mit dem Ergebnis, dass jemand erwarten würde der nur das Skript kennt.
Starten Sie R im Hintergrund neu, indem Sie die beschriebene Tastenkombination verwenden.
Führen Sie das komplette Skript neu aus, indem Sie die beschriebene Tastenkombination verwenden. Überprüfen Sie das Ergebnis.
Workflow mit Projekten
Was ist ein RStudio Projekt?
Wenn wir in der Praxis mit R arbeiten, beinhaltet das eigentlich immer, einen Datensatz in R einzulesen um dann mit den Daten verschiedene Analysen durchzuführen. Solche Datensätze liegen typischerweise als Datei auf der Festplatte, z.B. Pounds.csv
. Wenn wir den Datensatz einlesen wollen, müssen wir R sagen, wo die Datei liegt. Das ist in der Praxis sehr umständlich und macht die Analyse fehleranfällig, wenn man z.B. das R Skript an eine Kollegin schicken möchte und diese Person natürlich eine andere Ordnerstruktur auf ihrem Computer hat. Es ist daher gute Praxis von Beginn an mit sogenannten Projekten zu arbeiten, die die Arbeit mit mehreren Dateien (was in der Praxis bei fast jeder Analyse relevant ist), enorm erleichtern.
Ein RStudio Projekt ist zunächst einfach ein neuer Ordner auf meiner Festplatte, der alle Dateien (R Skripte, Datensätze, Abbildungen, etc.) eines bestimmen Analyseprojekts (z.B. meine Abschlussarbeit) enthalten soll. Der RStudio Projektordner enthält dann zusätzlich noch eine Verknüpfung, mit der ich das Projekt in RStudio öffnen kann.
Was genau inhaltlich ein neues “Projekt” ausmacht und wann es sich lohnt, für eine neue Analyse ein neues RStudio Projekt zu erstellen, kann man allgemein schwer sagen. Ziemlich sicher wäre ein einziges RStudio Projekt, dass alle statistischen Auswertung in Ihrem Studium enthält “zu groß”, aber ein RStudio Projekt, das nur das Material zu einem einzelnen Übungsblatt im Statistik Seminar enthält vermutlich “zu klein”.
Erfahrungsgemäß tendiert man am Anfang eher dazu, “zu große” RStudio Projekte zu erstellen. Um die Arbeit mit RStudio Projekten zu üben, empfehlen wir, dass Sie zumindest für jeden Themenbereich des Statistik Seminars ein eigenes RStudio Projekt erstellen.
Ein neues RStudio Projekt erstellen
Um in RStudio ein neues Projekt zu erstellen…
- klicken wir auf File > New Project,
- geben einen Namen für unseren Projektordner ein,
- wählen aus, wo wir den Projektordner auf unserem Computer speichern wollen und
- klicken auf Create Project.
Dieser Ablauf wird in Abbildung 2 dargestellt.
Nachdem wir das neue Projekt erstellt haben, sehen wir in RStudio im Files Fenster den Projektordner. Zu Beginn enthält der Ordner nur eine Verknüpfung, das heißt eine Datei mit der Dateiendung .Rproj
die genauso heißt wie der Projektordner. Wenn wir RStudio schließen, können wir das Projekt wieder öffnen, indem wir auf unserem Computer die .Rproj
Datei des Projekts doppelklicken.
Wenn wir mit RStudio ein Projekt geöffnet haben und eine Datei speichern, z.B. ein R Skript oder eine Abbildung, werden diese Dateien standardmäßig im Projektordner gespeichert. Dadurch ist es sehr einfach alle Dateien, die zu dem Projekt gehören, zusammen zu halten.
Übung 3:
Erstellen Sie ein neues RStudio Projekt mit Namen
R_Intro
(oder einem anderen Namen, der Ihnen besser gefällt). Überlegen Sie sich, wo genau Sie das Projekt sinnvollerweise auf Ihrem Rechner speichern, damit Sie den Ordner leicht wieder finden, wenn Sie das Projekt das nächste mal öffnen wollen.Schließen Sie RStudio.
Laden Sie sich hier die Datei
msleep.R
herunter und verschieben Sie die Datei in den neu erstellten Projektordner. (Hinweis: Wenn sich beim herunterladen die Datei stattdessen in Ihrem Browser öffnet, gehen Sie zurück zum Link und machen Rechtsklick > Ziel speichern unter)Öffnen Sie das Projekt, indem Sie auf die
R_Intro.Rproj
Datei doppelklicken.Überprüfen Sie, dass Sie die heruntergeladene Datei im Files Fenster in RStudio sehen.
Klicken Sie im Files Fenster auf das R Skript
msleep.R
.Führen Sie die Befehle im Skript
msleep.R
aus. Es ist egal, dass Sie nicht verstehen was alle Befehle genau bedeuten. Wenn ein Fehler auftaucht, liegt es daran, dass Ihnen ein bestimmtes R Paket fehlt. Finden Sie mithilfe der Informationen im R Skript heraus, welches Paket Ihnen fehlt, installieren Sie es und führen Sie die Befehle im Skript erneut aus.Lösung zu 3.7# Sie müssen das Paket ggplot2 installiert haben install.packages("ggplot2")
Betrachten Sie das Files Fenster in RStudio und stellen Sie fest, was sich in Ihrem Projektordner verändert hat.
Lösung zu 3.8Das Skript hat zwei neue Dateien erstellt und abgespeichert: Den Datensatz
msleep.csv
und die Abbildungmsleep.png
. Als Speicherort wurde automatisch der Projektordner gewählt.
Workflow zum Einlesen von Datensätzen
Datensatz im .csv Format einlesen
Datensätze liegen häufig in Dateien der Formate .csv
, .xlsx
oder .sav
vor. Für jedes dieser Formate (und viele weitere) gibt es in R Funktionen um solche Dateien einzulesen. Wir werden uns hier zunächst nur mit .csv
Dateien beschäftigen.
Das csv-Format benutzt in der englischen Standardvariante das “,” um Einträge unterschiedlicher Zellen einer Tabelle voneinander zu trennen. Entsprechend müssen Kommastellen von Dezimalzahlen mit einem “.” beginnen. Häufig verwenden Programme in der deutschen Spracheinstellung ein leicht anderes Format, das Zellen mit einem “;” und Dezimalstellen mit “,” voneinander trennt.
Beide Arten von csv-Dateien können in R problemlos eingelesen werden. Die unterschiedliche Konfiguration der Trennzeichen muss jedoch berücksichtigt werden. Für die englische Variante gibt es die Funktion read.csv()
und für die deutsche Variante die Funktion read.csv2()
. Wird die falsche Funktion zum Einlesen verwendet, liegen die Daten in R in keinem sinnvollen Format vor.
Um einen Datensatz einzulesen, müssen wir im R Befehl den Dateipfad angeben, das heißt wie die Datei heißt und wo die Datei auf dem Computer genau liegt. Wenn wir uns aber 1. in einem RStudio Projekt befinden und 2. die Datei direkt im Projektordner liegt, dann reicht es beim Einlesen aus, nur den Namen der Datei (inklusive Dateiendung) anzugeben.
Als Beispiel können wir uns hier den Datensatz Pounds.csv
herunterladen, in den Projektordner verschieben und mit der Funktion read.csv2()
in R einlesen. Die so eingelesenen Daten können wir dann mit <- einem Objekt pounds
zuweisen, um dann in R mit den Daten weiterarbeiten zu können. Zum Beispiel können wir uns mit der Funktion head()
die ersten 6 Zeilen des Datensatzes ansehen:
<- read.csv2("Pounds.csv")
pounds head(pounds)
group treat motivat pounds
1 1 0 4 15
2 1 0 4 17
3 1 0 4 15
4 1 0 4 17
5 1 0 4 16
6 1 0 6 18
Falls wir uns nicht sicher sind, in welchem csv-Format die Daten abgespeichert sind, können wir einfach beide Funktionen (read.csv()
und read.csv2()
) ausprobieren und sehen, welche die Daten im gewünschten Format einliest.
Bei vielen Macs ist die App Numbers das Standardprogramm, wenn Sie versuchen außerhalb von RStudio eine .csv
-Datei zu öffnen, z.B. indem Sie im Finder auf eine csv-Datei doppelklicken. Aus Gründen, die niemand versteht, verändert die Numbers App jede geöffnete csv-Datei so, dass die Datei mit R nicht mehr normal eingelesen werden kann. Die Veränderung der Datei passiert bereits durch das Öffnen, also sogar wenn Sie die Datei nach dem Öffnen gar nicht neu abspeichern.
Aus diesem ärgerlichen Grund müssen Sie leider verhindern, eine csv-Datei mit Numbers zu öffnen. Sollte Ihnen das in unserem Seminar doch mal aus Versehen passieren, empfehlen wir Ihnen die Datei einfach nochmal neu herunterzuladen. Sollte Numbers auf Ihrem Mac das Standardprogramm zum Öffnen von csv-Dateien sein, empfehlen wir Ihnen, stattdessen ein anderes Standardprogramm festzulegen. Eine Anleitung zur Änderung der Standardprogramme auf dem Mac finden Sie hier.
Das Working Directory…
…oder: “Warum reicht es in einem RStudio Projekt, beim Einlesen von Dateien nur den Namen der Datei anzugeben?”
Wenn wir in R arbeiten, gibt es immer einen Ordner auf unserem Computer, in dem R nach Dateien sucht (z.B. wenn diese eingelesen werden sollen) oder Dateien abspeichert (z.B. wenn eine mit R erstellte Grafik gespeichert werden soll). Dieser Ort heißt Working Directory (oder auf Deutsch Arbeitsverzeichnis).
In einem RStudio Projekt ist automatisch der Projektordner als Working Directory eingestellt. Wenn wir eine Datei einlesen wollen, müssen wir den Dateipfad immer nur ausgehend vom Working Directory angeben. Das bedeutet:
- Wenn die Datei direkt im Projektordner liegt, reicht es also aus, beim Einlesen nur den Namen der Datei (inklusive Dateiendung) anzugeben, z.B.
pounds <- read.csv2("Pounds.csv")
. - Wenn die Datei im Projektordner nochmal in einem Unterordner liegt (z.B. ein Ordner Namens
data
), muss man den Unterordner in den Dateipfad mit aufnehmen, alsopounds <- read.csv2("data/Pounds.csv")
.
Hier wird der große Vorteil von RStudio Projekten deutlich:
Wenn alle Dateien im Projektordner liegen, funktionieren unsere Analysen unabhängig davon, wo auf dem Computer der Projektordner genau liegt. Das bedeutet, wir können den Projektordner auf unserem Computer beliebig verschieben oder auch als Email an unsere Kolleginnen versenden.
Wo das Working Directory zu einem bestimmten Zeitpunkt genau liegt, sehen wir entweder wie in Abbildung 3 dargestellt am Kopf des Fensters Console oder indem wir den R Befehl getwd()
ausführen.
Übung 4:
Laden Sie sich hier die Datei
HSB.csv
herunter und verschieben Sie die Datei in den Projektordner.Lesen Sie die Datei
HSB.csv
mit der Funktionread.cvs2()
ein und weisen Sie die Daten dem Objekthsb
zu.Erstellen Sie eine Zusammenfassung aller Variablen im HSB Datensatz mit dem Befehl
summary(hsb)
.Lösung zu 4.3<- read.csv2("HSB.csv") hsb summary(hsb)
School Minority Sex SES Min. :1224 Length:7185 Length:7185 Min. :-3.760000 1st Qu.:3020 Class :character Class :character 1st Qu.:-0.540000 Median :5192 Mode :character Mode :character Median : 0.000000 Mean :5278 Mean :-0.001857 3rd Qu.:7342 3rd Qu.: 0.600000 Max. :9586 Max. : 2.690000 MathAch Size Sector PRACAD Min. :-2.83 Min. : 100 Length:7185 Min. :0.0000 1st Qu.: 7.28 1st Qu.: 565 Class :character 1st Qu.:0.3200 Median :13.13 Median :1016 Mode :character Median :0.5300 Mean :12.75 Mean :1057 Mean :0.5345 3rd Qu.:18.32 3rd Qu.:1436 3rd Qu.:0.7000 Max. :24.99 Max. :2713 Max. :1.0000 DISCLIM MeanSES Min. :-2.4200 Min. :-1.190000 1st Qu.:-0.8200 1st Qu.:-0.320000 Median :-0.2300 Median : 0.040000 Mean :-0.1319 Mean : 0.006224 3rd Qu.: 0.4600 3rd Qu.: 0.330000 Max. : 2.7600 Max. : 0.830000
In der Übung 3.7 wurde in Ihrem Projektordner die Datei
msleep.csv
erstellt. Wenn sie diese Datei nicht haben, können Sie die Datei stattdessen hier herunterladen. Lesen Sie die Dateimsleep.csv
ein und weisen Sie die Daten dem Objektmsleep_data
zu. Probieren Sie aus, welche der beiden read.csv Funktionen geeignet ist, um den Datensatz einzulesen.Lösung zu 4.4<- read.csv("msleep.csv") msleep_data head(msleep_data)
name genus vore order conservation 1 Cheetah Acinonyx carni Carnivora lc 2 Owl monkey Aotus omni Primates <NA> 3 Mountain beaver Aplodontia herbi Rodentia nt 4 Greater short-tailed shrew Blarina omni Soricomorpha lc 5 Cow Bos herbi Artiodactyla domesticated 6 Three-toed sloth Bradypus herbi Pilosa <NA> sleep_total sleep_rem sleep_cycle awake brainwt bodywt 1 12.1 NA NA 11.9 NA 50.000 2 17.0 1.8 NA 7.0 0.01550 0.480 3 14.4 2.4 NA 9.6 NA 1.350 4 14.9 2.3 0.1333333 9.1 0.00029 0.019 5 4.0 0.7 0.6666667 20.0 0.42300 600.000 6 14.4 2.2 0.7666667 9.6 NA 3.850
Berechnen Sie den Mittelwert der Spalte
sleep_total
.Lösung zu 4.5mean(msleep_data$sleep_total)
[1] 10.43373
Bonus: Berechnen Sie den Mittelwert der Spalte
sleep_total
nur für die Zeilen des Datensatzes, bei denen in der Spalteorder
der Wert"Primates"
steht.Lösung zu 4.6mean(msleep_data[msleep_data$order == "Primates", "sleep_total"])
[1] 10.5