Pakete(-Installation), Workspace, Daten laden und speichern in R

R
tutorial
Author

NA

1

1. Pakete installieren und laden

Die Funktionalität von base R wird um ein vielfaches durch ein sehr umfangreiches Pakete-Universum ergänzt. Diese Erweiterungen werden für R packages oder libraries genannt. Im Prinzip kann jeder(r) eine solche library schreiben, deswegen ist bei der Nutzung neuer libraries etwas Vorsicht geboten. Es gibt jedoch eine Reihe sehr weit verbreiteter und hochwertiger libraries, deren Nutzung uneingeschränkt empfohlen werden kann.

Liegen Pakete auf CRAN, können sie mithilfe von install.packages() installiert werden. Pakete, die ausschließlich auf Github verfügbar sind, können über devtools::install_github() installiert werden. Für nähere Informationen siehe auch: http://iqbstaff.pbworks.com/w/page/138429033/R-Pakete%20Installieren

# Paket von CRAN installieren
install.packages("car")
# Paket von Github installieren
remotes::install_github("sachseka/eatPrep", upgrade = "never")

Achtung: Wenn ein Paket bereits geladen ist und eine Neuinstallation dieses Pakets versucht wird, kann dies zu Fehlern führen. In diesem Fall kann entweder die R Session neu gestartet oder das entsprechende Paket mit detach() “entladen” werden.

Zur Verwendung von Paketen können einzelne Funktionen explizit über ihren Namespace angesprochen werden, ohne dass sie dafür explizit geladen werden müssen:

# Funktion verwenden, ohne Paket zu laden
some_data <- c(1, 2, 1, 4)
car::recode(some_data, "1 = 'a'; 2 = 'b'; 4 = 'd'")
[1] "a" "b" "a" "d"

Oder das Paket wird vollständig geladen mithilfe des library() Befehls

# Paket laden
library("car")
Loading required package: carData
some_data <- c(1, 2, 1, 4)
recode(some_data, "1 = 'a'; 2 = 'b'; 4 = 'd'")
[1] "a" "b" "a" "d"

Falls es mehrere Pakete gibt, die Funktionen mit demselben Namen beinhalten (zB dplyr::recode()), kann mit car::recode() sichergestellt werden, dass immer die gewünschte Funktion verwendet wird, auch wenn zusätzlich das Paket dplyr geladen wird.

2. Working Directory

Wenn R geöffnet wird (ob über die GUI oder RStudio), wird ein aktives Working Dirctory festgelegt. In diesem Ordner sucht R dann standardmäßig nach Dateien bzw. speichert diese dort ab. Mit den Befehlen getwd() und setwd() kann das Working Directory ausgegeben und verändert werden.

# Working Directory ausgeben lassen
getwd()
# Working Directory ändern
setwd("t:/_R")
# Geändertes Working Directory überprüfen
getwd()

Achtung: Das Zeichen “\” ist in R reserviert. Um Probleme hierbei zu umgehen, kann stattdessen einfach das herkömmliche “/” verwendet werden.

Verwendet man RStudio und öffnet eine neue RStudio-Session per Doppelklick auf eine abgespeicherte R-Syntax, wird das Working Directory automatisch in den Pfad gesetzt, in dem die Syntax liegt. Zusätzlich lässt sich das Working Directory in RStudio über ein Drop-Down Menü verändern.

Man kann Dateipfade also in relative bzw. absolute Dateipfade unterteilen:

# Working Directory und relativen Dateipfade verwenden
setwd("P:/R/03_Workshops_und_Tutorials/02_R_Einfuehrung/Material_WSIII")
test <- readRDS("mtcars.RDS")

# Absoluten Dateipfad verwenden (das Workingdirectory ist dabei egal)
test <- readRDS("P:/R/03_Workshops_und_Tutorials/02_R_Einfuehrung/Material_WSIII/mtcars.RDS")

Wenn man in einem kleineren Projekt arbeitet und Syntaxen per Mail oder Repository austauscht (zum Beispiel einzelne Paper-Projekte mit Co-Autoren unterschiedlicher Institutionen), ist es ratsam, keine absoluten Pfade in seinen Syntaxen zu verwenden. Wenn man im Gegensatz dazu in größeren Projekten institutsintern arbeitet, in denen Datensätze auf gemeinsamen Laufwerken gespeichert sind, bietet sich die Verwendung von absoluten Pfaden an.

3. Dateien speichern und laden

In R gibt es zwei R-spezifische Dateiformate, um Daten zu speichern: RDS und RData. Falls Daten nur für die Nutzung in späteren R-Sessions benötigt werden, empfiehlt sich immer die Nutzung eines dieser Formate. Andere Formate (.csv, xlsx., sav usw.) sind im Vergleich deutlich fehleranfälliger. Zusätzlich können häufig Datensätze nicht in der exakt gleichen Formatierung wieder eingelesen werden.

saveRDS() dient zur Speicherung eines einzelnen Objekts in R, die die Endung RDS erhalten sollten. Beim Laden dieses Objekts wird dem Objekt ein neuer Name zugewiesen.

# Beispieldatensatz
head(mtcars)
# Objekt speichern
saveRDS(mtcars, "Material_WSIII/mtcars.RDS")
# Objekt laden
dat <- readRDS("Material_WSIII/mtcars.RDS")
# Objekt betrachten
head(dat)

save() dient zur Speicherung eines oder (in der Regel) mehrerer Objekte auf einmal, entsprechende Dateien sollten die Endung RData erhalten. Beim Laden dieser Objekte behalten diese ihren ursprünglichen Namen. Dies kann nervig sein, da mögliche andere Personen nicht wissen, welche Namen die gespeicherten Objekte hatten.

# Beispieldatensätze
mtcars2 <- mtcars
iris2 <- iris
# Objekte speichern (file Argument explizit benennen!)
save(mtcars2, iris2, file = "Material_WSIII/stuff.RData")
# Objekte laden
load("Material_WSIII/stuff.RData")

Ungünstig ist die Verwendung von save bzw. load auch deshalb, weil beim Laden dieser Objekte gegebenenfalls gleichlautende und bereits in der globalen Umgebung vorhandene Objekte überschrieben werden. Setzt man um den load-Befehl eine Klammer, erkennt man immerhin, welche Namen die gespeicherten Objekte hatten:

# Objekte laden und hre Namen anzeigen lassen
(load("Material_WSIII/stuff.RData"))

Wenn man überprüfen möchte, wie die in der globalen Umgebung geladenen Objekte heißen, kann man mithilfe des Befehls ls() die aktuell vorhanden Objekte in der globalen Umgebung überprüfen oder diese in RStudio unter Environment betrachten.

# Welche Objekte liegen in der globalen Umgebung?
ls()
[1] "pandoc_dir"      "quarto_bin_path" "some_data"      

4. Andere Datei-Formate

.csv

Beim Speichern von comma seperated files (.csv) können die Funktionen write.csv() und write.csv2() verwendet werden, wobei letztere Funktion den deutschen Excel-Konventionen (“,” als Dezimaltrenner) entspricht.

# Objekt speichern
write.csv2(mtcars, "Material_WSIII/mtcars.csv")
# Objekt laden
dat <- read.csv2("Material_WSIII/mtcars.csv")
# Objekt betrachten
head(dat)

.xlsx (Excel)

Zum Einlesen von Excel files empfiehlt sich die Funktion read_xlsx() aus dem Paket readxl. Achtung! Da das Paket standardmäßig einen tibble ausgibt, eine Spezialform von data.frames, empfiehlt sich die Umwandlung zu einem data.frame. Da das Paket leider kein Schreiben von Excel files unterstützt, empfiehlt sich hierfür die Funktion write_xlsx() aus dem Paket eatAnalysis.

# Objekt speichern
eatAnalysis::write_xlsx(mtcars, "Material_WSIII/mtcars.xlsx", row.names = FALSE)
# Objekt laden
dat <- readxl::read_xlsx("Material_WSIII/mtcars.xlsx")
dat <- as.data.frame(dat)
head(dat)

.sav (SPSS)

Zum Importieren von SPSS-Dateien bietet sich das Paket eatGADS an. Es ermöglicht das Einlesen von Daten in einem zwei-schrittigem Vorgehen. Zuerst werden die Daten eingelesen.

# sav Datei einlesen
spss <- eatGADS::import_spss("Material_WSIII/example.sav")

Diese Datei enthält sämtliche Metadaten, die auch die originale spss-Datei beinhaltet (Variablen- und Wertelabel etc.). Diese können mithilfe von extractMeta abgefragt werden. Im Folgenden werden die Metadaten für die Variable "PJgsep_a" abgerufen:

# sav Datei einlesen
eatGADS::extractMeta(spss, "PJgsep_a")

Um Analysen in R durchzuführen, müssen die Daten aus diesem Objekt nun mithilfe der extractData()-Funktion extrahiert werden. Diese ermöglicht zum einen Missingcodes anzuwenden, zum anderen gelabelte Variablen entweder als numerische, character oder Faktor-Variablen auszugeben.

# sav Datei einlesen
dat <- eatGADS::extractData(spss, convertLabel = "character", convertMiss = TRUE)
head(dat)

.dta (Stata)

Stata-Datein können mithilfe des Paktes haven sowohl gelesen als auch geschrieben werden.

# Objekt speichern
haven::write_dta(mtcars, "Material_WSIII/mtcars.dta")
# Objekt laden
dat <- haven::read_dta("Material_WSIII/mtcars.dta")
dat <- as.data.frame(dat)
head(dat)

.dat (Mplus)

Häufig möchte man in Vorbereitung von Analysen mithilfe von Mplus Daten in R aufbereiten. Das Paket MplusAutomation beinhaltet die Funktion prepareMplusData(), die das schreiben von .dat Datein ermöglicht und zusätzlich einen Rohling für die Mplus-Analysesyntax erstellt. Außerdem beinhaltet das Paket zahlreiche Möglichkeiten verschiedene Analysen zu automatisieren.

# Objekt speichern
MplusAutomation::prepareMplusData(mtcars, filename = "Material_WSIII/mtcars.dat")

Footnotes

  1. Image by Van Tay Media on Unsplash.↩︎