R Workflow: RStudio Projekte und Datensätze einlesen

Veröffentlichungsdatum

7. November 2024

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!

Warum wollen wir den Workspace 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…

  1. beim Öffnen kein Workspace geladen werden soll und
  2. 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.

Abbildung 1: Die Abbildung ist aus Kapitel 6.2 des Buchs R for Data Science (2e) von Hadley Wickham, Mine Çetinkaya-Rundel und Garrett Grolemund.

ÜBUNG 1:

  1. Passen Sie wie beschrieben die Workspace Einstellungen in RStudio an.

  2. 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).

  3. Ö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:

  1. Erstellen Sie ein neues R Skript das nur die folgenden drei Zeilen enthält:
x <- 1
y <- 2
x + y
  1. Führen Sie die drei Befehle im Skript der Reihe nach aus.

  2. Geben Sie direkt in der R Console den folgenden Befehl ein: y <- x

  3. 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.

  4. Starten Sie R im Hintergrund neu, indem Sie die beschriebene Tastenkombination verwenden.

  5. 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.

Wie häufig erstelle ich ein neues Projekt?

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.

Abbildung 2: Die Abbildung ist aus Kapitel 6.2 des Buchs R for Data Science (2e) von Hadley Wickham, Mine Çetinkaya-Rundel und Garrett Grolemund.

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:

  1. 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.

  2. Schließen Sie RStudio.

  3. 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)

  4. Öffnen Sie das Projekt, indem Sie auf die R_Intro.Rproj Datei doppelklicken.

  5. Überprüfen Sie, dass Sie die heruntergeladene Datei im Files Fenster in RStudio sehen.

  6. Klicken Sie im Files Fenster auf das R Skript msleep.R.

  7. 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.

    # Sie müssen das Paket ggplot2 installiert haben
    install.packages("ggplot2")
  8. Betrachten Sie das Files Fenster in RStudio und stellen Sie fest, was sich in Ihrem Projektordner verändert hat.

    Das Skript hat zwei neue Dateien erstellt und abgespeichert: Den Datensatz msleep.csv und die Abbildung msleep.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:

pounds <- read.csv2("Pounds.csv")
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.

Die Numbers App auf dem Mac zerstört .csv Dateien!

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, also pounds <- 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.

Working Directory überprüfen

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.

Abbildung 3: Die Abbildung ist aus Kapitel 6.2 des Buchs R for Data Science (2e) von Hadley Wickham, Mine Çetinkaya-Rundel und Garrett Grolemund.

Übung 4:

  1. Laden Sie sich hier die Datei HSB.csv herunter und verschieben Sie die Datei in den Projektordner.

  2. Lesen Sie die Datei HSB.csv mit der Funktion read.cvs2() ein und weisen Sie die Daten dem Objekt hsb zu.

  3. Erstellen Sie eine Zusammenfassung aller Variablen im HSB Datensatz mit dem Befehl summary(hsb).

    hsb <- read.csv2("HSB.csv")
    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  
  4. 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 Datei msleep.csv ein und weisen Sie die Daten dem Objekt msleep_data zu. Probieren Sie aus, welche der beiden read.csv Funktionen geeignet ist, um den Datensatz einzulesen.

    msleep_data <- read.csv("msleep.csv")
    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
  5. Berechnen Sie den Mittelwert der Spalte sleep_total.

    mean(msleep_data$sleep_total)
    [1] 10.43373
  6. Bonus: Berechnen Sie den Mittelwert der Spalte sleep_total nur für die Zeilen des Datensatzes, bei denen in der Spalte order der Wert "Primates" steht.

    mean(msleep_data[msleep_data$order == "Primates", "sleep_total"])
    [1] 10.5