Überblick Lektion 1
Dies ist der Survival Guide, der dir das Überleben bei der Arbeit mit RStudio und Moodle leichter machen soll.
Hier findest du ein paar einfache Regeln und Tipps, die zunächst ein klein wenig Disziplin erfordern, sich im Laufe der Zeit aber zunehmend bezahlt machen werden.
ℹ️ Hinweis ← (hier klicken)
Dieser Survival Guide ist dann am leichtesten zu verstehen und befolgen, wenn man das erste Moodle-Tutorial schon gemacht und mit dem zweiten begonnen hat.
Alle ℹ️ grünen Hinweise im Text kann man anklicken!
Lege ein dediziertes Arbeitsverzeichnis an, zum Beispiel:C:\mein\RStudio\R_Tutorials
ℹ️ Hinweis
Es ist egal, ob es sich um ein einfaches Arbeitsverzeichnis oder um ein Projektverzeichnis handelt. Du brauchst einfach nur irgendein Verzeichnis.
In dieses Verzeichnis kopierst du dann die Dateien, die du für deine Tutorials benötigst. Das könnte dann z.B. so ähnlich aussehen:
ℹ️ Hinweis: Je weniger Dateien, desto besser
ℹ️ Hinweis: Dateinamenerweiterungen
ℹ️ Hinweis: Datei-Ansicht in RStudio
Am besten kopierst du erstmal nur die Dateien, die du für das jeweilige Tutorial auch tatsächlich brauchst, und zwar erst dann, wenn du sie brauchst (das merkst du dann schon). Auch wenn das erstmal nur eine einzige Datei ist.
Es ist dein Arbeitsverzeichnis. Versichere dich, dass du jede Datei darin, sowie ihren Verwendungszweck, kennst.
Weitere Dateien kopierst du erst dann, wenn du sie benötigst.
Falls die Dateinamenerweiterungen im Windows Datei-Explorer nicht angezeigt werden, sieht das ungefähr so aus:
In diesem Fall kannst du auch an den vorangestellten Dateisymbolen erkennen, ob es sich um eine R-Datei (.RData
) oder um eine einfache Textdatei (.txt
) handelt.
Du kannst die Dateinamenerweiterungen aber auch einfach wieder einblenden:
Auch in der rechten unteren Ecke von RStudio kannst du die Dateien mit ihrem vollständigen Namen sehen.
Falls du den Reiter "Files" nicht auswählen kannst, öffne einmal das Menü "View" und wähle "Show Files".
Normalerweise wird hier automatisch der Inhalt des Arbeitsverzeichnisses angezeigt, sobald du es (mit setwd()
) gesetzt hast. Siehe dazu auch weiter unten. Aber möglicherweise musst du das richtige Verzeichnis auch erst über die Navigationselemente (C: > mein > RStudio > R_Tutorials) auswählen.
Wenn du Dateien kopierst, musst du ggf. die "Files"-Ansicht aktualisieren:
Setze dann dein Arbeitsverzeichnis in RStudio:
Wenn du dein Arbeitsverzeichnis, wie oben dargestellt, über das Menü setzt, dann führt RStudio automatisch den entsprechenden Befehl in der Konsole aus:
Jetzt ist sichergestellt, dass RStudio problemlos mit den Dateien in deinem Arbeitsverzeichnis arbeiten kann.
Schau im Moodle unbedingt die Video-Tutorials an, nicht nur die verschriftlichen Versionen. Protokolliere alles in einem eigenen Skript! Beginne ℹ️ für jedes Tutorial ein neues Skript.
Ein Tutorial besteht möglicherweise aus mehreren Videos. Erstelle für jedes Tutorial ein Skript, nicht für jedes Video.
Die Liste deiner Skripte sieht dann zum Beispiel so aus:
Durch die Nummern am Anfang des Dateinamens werden die Dateien automatisch in der richtigen Reihenfolge angezeigt (bei alphabetischer Sortierung).
Zusammen mit den anderen Dateien aus dem Tutorial könnte dein Arbeitsverzeichnis jetzt etwa so aussehen:
Im RStudio hast du dann später für jedes Tutorial/Skript ein separates Fenster (wenn du z.B. aus mehreren Tutorials parallel etwas nachschauen möchtest):
ℹ️ Hinweis: Wie erstelle ich ein neues Skript?
Erstelle ein neues Skript:
Füge erstmal nur diese eine Zeile ein:
Und speichere die Datei:
Mit der Dateiendung ".R
":
Vielleicht möchtest du jetzt schon mal für die ersten drei Tutorials eine solche (fast) leere Skriptdatei erstellen…
In diesem Skript schreibst du alles auf, was dir im Tutorial wichtig erscheint. Das sind zunächst natürlich alle gezeigten Befehle, die du dann auch selbst ausprobieren kannst, aber auch deine eigenen Gedanken als Kommentare. Zum Beispiel:
# Mit diesem Befehl kann ich den Mittelwert
# der Variable "semester" berechnen
mean(datensatz$semester)
# und mit diesem Befehl kann ich den Median
# der Variable "semester" berechnen
median(datensatz$semester)
# Wie berechnet man nochmal den Modalwert?
# TODO:
# Da muss ich später nochmal nachschauen...
ℹ️ Hinweis: Ausführliche Kommentare
Du kannst deine Kommentare so ausführlich gestalten wie du willst. Das Skript darf auch zu 90 Prozent aus Kommentaren und nur zu 10 Prozent aus dem eigentlichen Programmcode bestehen. Für die Funktion macht das keinen Unterschied.
Aber auch hier gilt: Weniger ist manchmal mehr. Nicht jeder Befehl muss mit einem ausführlichen Kommentar versehen werden. Für die Befehle mean()
und median()
ist das nicht wirklich notwendig. Diese Befehle sind selbsterklärend.
Benutze auch die in den Videotutorials gezeigte Art der Kommentare mit den vier Kommentarzeichen (####).
#### Abschnitt 1 ####
befehl1.1(...)
befehl1.2(...)
befehl1.3(...)
#### Abschnitt 2 ####
befehl2.1(...)
befehl2.2(...)
befehl2.3(...)
#etc.
Diese Abschnittskommentare helfen dir dabei, dein Skript zu strukturieren und übersichtlich zu gestalten. Über die dreieckigen Symbole in der Seitenleiste kannst du den jeweiligen Abschnitt ein- und ausklappen:
Dein Skript ist praktisch das Protokoll des Tutorials und deiner Gedanken dazu, das du im Laufe der Zeit auch nochmal überarbeiten kannst.
Beginne jedes Skript mit einem solchen Init-Bereich:
#### Init ####
rm(list=ls())
setwd("C:/mein/RStudio/R_Tutorials")
#install.packages("psych")
library(psych)
datensatz <- read.csv("datensatz.txt")
Du kannst dieses Beispiel als Template benutzen. Kopiere diese Zeilen einfach an den Anfang deines eigenen Skripts und passe sie dort entsprechend an.
Wann immer du mit dem Tutorial (bzw. mit dem Skript) arbeiten willst, führst du zunächst jeden der oben gezeigten vier ℹ️ oder noch mehr Befehle einzeln aus.
Manchmal musst du auch mehrere Packages laden oder mehrere Datensätze einlesen:
#### Init ####
rm(list=ls())
setwd("C:/mein/RStudio/R_Tutorials")
#install.packages("psych")
#install.packages("gmodels")
library(psych)
library(gmodels)
datensatz <- read.csv("datensatz.txt")
datensatz2 <- read.csv("datensatz2.txt")
install.packages()
muss für jedes Package nur ein einziges Mal ausgeführt werden, danach nie wieder. Darum ist es hier mit einem #
-Zeichen auskommentiert.
Erklärung der Befehle im Einzelnen:
rm(list=ls())
Löscht das komplette Environment. Alle Objekte aus den vorangegangen Sitzungen werden entfernt, damit jedes Skript immer wieder mit einem sauberen Environment starten kann.
Alle notwendigen Vorbereitungen, um die Übungen im Tutorial durchzuführen, sind im Init-Bereich enthalten, können also jederzeit einfach wiederholt werden. So ist sichergestellt, dass du nichts weiter brauchst als das Skript und die Datendatei. Es gibt keine Abhängigkeit von einem vorangegangenem Tutorial.
setwd("C:/mein/RStudio/R_Tutorials")
Setzt das Arbeitsverzeichnis. Wenn du den genauen Pfad nicht weißt, kannst du das Arbeitsverzeichnis einfach über das Menü setzen (wie oben gezeigt) und den Befehl dann aus der Konsole in deinen Init-Bereich kopieren.
#install.packages("psych")
Hier musst du die Packages installieren, die für das jeweilige Tutorial erforderlich sind.
Ein Package muss immer nur ein einziges Mal installiert werden. Danach wird die entsprechende Zeile, wie hier dargestellt, mit einem #-Zeichen auskommentiert.
Beachte, dass die entsprechende Zeile nicht entfernt, sondern nur auskommentiert wird. So kannst du immer sehen, welche Packages du bei einer Neuinstallation von R und/oder RStudio ggf. nochmal installieren musst.
library(psych)
Hier musst du die Packages laden, die für das jeweilige Tutorial erforderlich sind. Das ist nach jedem Neustart von RStudio einmal erforderlich.
datensatz <- read.csv("datensatz.txt")
Hier musst du die für das Tutorial benötigte(n) Datei(en) einlesen.
ℹ️ Beachte das Dateiformat. Siehe dazu auch den nächsten Abschnitt "Dateiformate".
Der konkrete Befehl zum Einlesen einer Datei hängt davon ab, welches Format die Datei hat.
Zum Einlesen von Textdateien kann das z.B. einer der folgenden Befehle sein:
datensatz <- read.csv("datensatz.txt")
datensatz <- read.delim("datensatz.txt")
datensatz <- read.table("datensatz.txt", header=TRUE, sep="\t", dec=".")
Zum Einlesen von .RData
-Dateien ist das dieser Befehl:
load("datensatz.RData")
Für weitere Details siehe den nächsten Abschnitt "Dateiformate".
Wenn du das oben gezeigte Template in dein Skript einfügst, sieht das ungefähr so aus:
Kurzversion
.RData
-Dateien kannst du so einlesen:
load("datensatz.RData")
.txt
-Dateien kannst du (vermutlich) so einlesen:
datensatz <- read.delim("datensatz.txt")
ℹ️ Hinweis: Achte darauf, welche Datei du einlesen sollst
Manchmal gibt es zwei Dateien, die denselben Datensatz enthalten (z.B. als .txt
und .RData
), aber mit kleinen Unterschieden.
Achtung! Diese beiden Befehle überschreiben sich möglicherweise gegenseitig:
datensatz <- read.delim("datensatz.txt")
load("datensatz.RData")
Beim zweiten Befehl steht nicht dabei, dass der Datensatz in das Objekt "datensatz" eingelesen wird.
.RData
-Datei wird kein Objektname angegeben. Der Name ergibt sich auch nicht aus dem Dateinamen. Das Objekt erhält automatisch den Namen, den es beim Speichern hatte.
Am besten schreibst du bei einem load()
-Befehl immer als Kommentar dabei, welches Objekt dadurch geladen wird:
# lädt das Objekt "datensatz"
load("datensatz.RData")
Dein Init-Bereich sieht dann z.B. so aus:
#### Init ####
rm(list=ls())
setwd("C:/mein/RStudio/R_Tutorials")
#install.packages("psych")
library(psych)
# lädt das Objekt "datensatz"
load("datensatz.RData")
txt
oder RData
). Meistens steht das bei einem Tutorial ganz am Anfang.
Lange Version
Die Daten liegen entweder im R-eigenen .RData
-Format oder in einem einfachen Textformat (.txt
) vor:
.RData
-Dateien:
Dateien mit der Endung .RData
sind recht einfach einzulesen. Du kannst die Datei einfach in der oben dargestellten "Files"-Ansicht anklicken. Dann öffnet sich ein Popupfenster, dass du bestätigen musst. Der entsprechende Befehl wird dann automatisch in der Konsole ausgeführt:
Da du dein Arbeitsverzeichnis gesetzt hast, kannst (und solltest) du die Pfadangabe entfernen, wenn du diesen Befehl in den Init-Bereich deines Skriptes kopierst.
Der richtige Befehl lautet also einfach nur:
load("datensatz.RData")
.txt
-Dateien:
Dateien mit der Endung .txt
sind einfache Textdateien (ℹ️ "R-fremde" Daten). Wenn du eine solche Datei in der "Files"-Ansicht mit der Maus anklickst, wird sie in einem Editor geöffnet, wo dir der Datei-Inhalt angezeigt wird:
Textdateien werden manchmal als "R-fremde" Daten bezeichnet, weil es sich dabei nicht um das R-eigene .RData
-Format handelt.
Das Textformat hat aber große Vorteile (s.u.) und ich würde es dem .RData
-Format jederzeit vorziehen.
ℹ️ Hinweis: Andere Dateiendungen.
Textdateien haben nicht immer die Dateinamenerweiterung .txt
, sondern können auch andere Endungen haben, wie etwa .csv
oder .dat
.
Es handelt sich im Grunde immer um CSV-Dateien (Comma Seperated Value). Die Tabellenzeilen befinden sich in einer solchen Datei untereinander und die einzelnen Felder einer Zeile werden durch ein bestimmtes Zeichen getrennt. Das Trennzeichen muss nicht immer das Komma sein, sondern kann auch das Semikolon oder das Tabulator-Zeichen (Tabstopp) sein.
Deinen eigenen Textdateien (wenn du selbst mal eine neue Datei erstellst) solltest du aber besser die Endung .txt
geben. Dann kann man sie leichter als Textdatei erkennen und man kann sie jederzeit einfach per Doppelklick in einem Editor öffnen und den Inhalt anschauen.
Um eine Textdatei in einen Data Frame einzulesen, kannst du den "Import Dataset" Button benutzen:
Du musst die zu importierende Datei auswählen und dann kannst du in einem Vorschaufenster begutachten, ob die Daten richtig in den Data Frame geladen werden:
Normalerweise hat RStudio bereits die richtigen Optionen ausgewählt, die du nicht mehr verändern musst. Durch einen Klick auf "Import" wird automatisch der passende Befehl in der Konsole ausgeführt:
Auch hier solltest du die Pfadangabe entfernen, wenn du diesen Befehl in den Init-Bereich deines Skriptes kopierst. Also in diesem Fall einfach nur:
read.csv("datensatz.txt", sep=";")
ℹ️ Hinweis: Unterschiedliche Befehle bei Textdateien
Je nachdem, wie das genaue Format innerhalb einer Textdatei aussieht, z.B. welches Zeichen als Feldtrenner benutzt wird etc., kommen ggf. unterschiedliche Befehle zum Einsatz. In der Regel ist es einer der folgenden:
datensatz <- read.csv(...)
datensatz <- read.delim(...)
datensatz <- read.table(...)
Den zur Datei passenden Befehl kannst du dir jederzeit über den "Import Dataset" Button generieren und in der Konsole anzeigen lassen.
ℹ️ Hinweis: Wenn es einen Fehler beim Einlesen gibt
Wenn es beim Einlesen einer Datei zu einer Fehlermeldung kommt, gibt es drei Dinge, die du tun kannst:
- Prüfe die korrekte Schreibweise des Dateinamens inklusive der Erweiterung.
- Prüfe, ob das Arbeitsverzeichnis ganz sicher korrekt gesetzt wurde. Dafür kann man den Befehl
getwd()
verwenden. - Prüfe, ob sich auch ganz sicher die richtigen Dateien im Arbeitsverzeichnis befinden. Dafür kann man den Befehl
dir()
verwenden.
Wenn die Daten nach dem Einlesen irgendwie "komisch" aussehen und irgendwas mit "RDX2" (o.ä.) angezeigt wird, hast du vermutlich eine .RData
-Datei über den Import-Button eingelesen...
Um eine .RData
-Datei einzulesen, musst du sie nur in der "Files"-Ansicht anklicken (oder im Datei-Explorer rechtsklicken --> Öffnen mit --> RStudio).
ℹ️ Hinweis: Welches Dateiformat ist besser?
Bei künftigen Arbeiten mit R (etwa für deine Bachelorarbeit) würde ich dir empfehlen, auf die Verwendung des .RData
-Formats zu verzichten.
Für jede statistische Auswertung brauchst du nicht mehr als zwei "Artefakte": den ursprünglichen Datensatz als Textdatei im CSV-Format und dein R-Skript.
Versuche die beiden Prozessschritte Datenerfassung und Datenauswertung strikt voneinander zu trennen. Bei der Datenerfassung bearbeitest du nur deine Daten und bei der Datenauswertung bearbeitest du nur dein Skript. Das Skript greift ausschließlich lesend auf die Datendatei zu (siehe dazu auch den nächsten Abschnitt "Keine Zwischenergebnisse").
Das CSV-Format ist ein offenes Format, das praktisch keiner weiteren Dokumentation bedarf. Es kann von einer Vielzahl unterschiedlicher Programme erzeugt und verwendet werden (z.B. Excel). Das erleichtert den Datenaustausch und die Kommunikation. Der Inhalt lässt sich jederzeit leicht überprüfen.
Normalerweise würde niemand seine originären Daten in einer .RData
-Datei speichern. Das .RData
-Format ist ein Konstrukt der Programmiersprache R. Bei einer .RData
-Datei handelt es sich nicht unbedingt um einen Datensatz, sondern um irgendein R-Objekt, dessen Zustand beim Laden so wiederhergestellt wird, wie er zum Zeitpunkt des Speicherns war.
.RData
-Datei einen ganz bestimmten Zustand herzustellen. Aber im "echten Leben" solltest du das .RData
-Format vermeiden.
.txt
-Datei (CSV-Datei) handelt es sich immer um eine Tabelle, die in einen Data Frame eingelesen wird. Bei einer .RData
-Datei handelt es sich um irgendein R-Objekt.
Wenn du die Originaldatei im Textformat hast, dann wird durch dein Skript automatisch jeder Verarbeitungsschritt dokumentiert (z.B. Konvertierungen oder Rekodierungen). Transparent und verlässlich. Bei einer .RData
-Datei weißt du nie so genau, welche Verarbeitungsschritte die Originaldaten bereits durchlaufen haben, bevor sie erneut gespeichert wurden, und welche potentiellen Fehlerquellen damit verbunden sind.
Eine .RData
-Datei ist wie ein Skript in einer Blackbox. Auch wenn du denkst, du weißt ganz genau, was in deiner .RData
-Datei ist... ein paar Monate später weißt du es vielleicht nicht mehr...
.RData
-Datei ist es nicht.
Das .RData
-Format ist meistens überflüssig und sorgt nur für zusätzliche Fehlerquellen. Sie auch unten beim Abschnitt "Keine Zwischenergebnisse".
Speichere keine Zwischenergebnisse per save()
oder per write.table()
, etc.
Falls du im Rahmen eines Tutorials irgendwelche Objekte oder Daten speichern sollst, kannst du das zu Übungszwecken ruhig mal machen, aber die dabei entstandenen zusätzlichen Dateien solltest du am besten sofort wieder löschen! Sie sind überflüssig und du wirst sie nicht wieder brauchen.
Solche gespeicherten Zwischenergebnisse haben keinen Nutzen. Sie sind bloß eine Quelle für Verwirrung und Fehler. Speichere keine Objekte oder Daten!
Alle Zwischenergebnisse kannst du jederzeit über dein Skript neu erzeugen, daher ergibt es überhaupt keinen Sinn, sie abzuspeichern.
Die beiden Befehle zum Speichern von Daten solltest du am besten wieder aus deinem Gedächtnis streichen. Du brauchst sie bei der Arbeit mit R nicht.
Idealerweise hast du für jedes Tutorial immer nur zwei Dateien:
– die Skriptdatei (z.B. 01-Einführung.R
)
– die Datendatei (z.B. datensatz.txt
)
Das heißt, du hast zu jeder Zeit immer nur eine einzige Datendatei, die deinen vollständigen Datensatz enthält.
(natürlich nur sofern im zugehörigen Tutorial nicht gleichzeitig mehrere Datensätze geladen und verarbeitet werden sollen)
☝️ Zur Erinnerung: Am Anfang eines jeden Skriptes solltest du das Environment immer wieder komplett löschen und den Datensatz neu einlesen. Zum Beispiel so:
rm(list=ls())
datensatz <- read.csv("datensatz.txt")
Betrachte das Skript als den Spiegel deiner Gedanken. Je einfacher die Struktur deiner Daten und deines Skriptes, desto klarer deine Gedanken.
Um diese Inhalte zu nutzen, musst du dich anmelden.