5 Packages

Bereits mit der Basisversion von R kommen wir schon recht weit. Der Erfolg von R geht aber nicht zuletzt darauf zurück, dass sich die Basisversion sehr einfach durch Packages erweitern lässt. Dabei handelt es sich um Sammlungen von Funktionen, deren Dokumentation und Zusatzinhalten (z. B. Beispieldaten), die R beispielsweise um neue Analyse- und Erhebungsverfahren erweitern oder bestehende Funktionalitäten vereinfachen.

Auf CRAN, dem Comprehensive R Archive Network – Sie erinnern sich, von dort haben Sie auch R installiert –, stehen aktuell rund 15.500 Packages zur Verfügung, die so ziemlich jede Funktionalität abdecken, die man sich wünschen kann.

5.1 Packages installieren

Packages lassen von sich von CRAN sehr einfach direkt in R bzw. RStudio über die Funktion install.packages("package_name") installieren. Mit folgendem Befehl installieren wir beispielsweise das Paket tibble:

install.packages("tibble")

R lädt automatisch die benötigten Dateien (und Packages, sollte das gewünschte Package andere Packages voraussetzen) herunter und installiert diese, sodass Sie meist nach wenigen Sekunden mit dem Package arbeiten können. Einmal installierte Packages bleiben Ihnen erhalten, bis Sie den Computer wechseln oder zu einer neuen R-Version (siehe nächstes Kapitel) wechseln.

5.2 Packages nutzen

Packages werden über die Funktion library(package_name) für die aktuelle R-Session geladen, sodass Sie auf die enthaltenen Funktionen zugreifen können. Es bietet sich daher an, die library()-Befehle immer ganz oben in ein R-Skript zu schreiben, da von ihnen dann die Funktionalität des restlichen Skripts abhängig ist.

Laden wir einmal das tibble-Package:

library(tibble)

Was kann dieses Package nun? In der Regel haben wir davon natürlich schon eine Vorstellung, da wir das neue Package vermutlich über eine Google-Suche nach dessen Funktionalität gefunden haben (ganz allgemein funktioniert eine Suche nach “R + [Name des gesuchten Verfahrens]” meist gut). Wie auch bei den Basis-Funktionen können wir auch bei Funktionen aus Packages über ein vorangestelltes ? die Dokumentationsseite der jeweiligen Funktion anzeigen.

Viele Packages kommen zudem mit einer oder mehreren Vignetten, längeren Dokumentationen, die die Funktionen eines Packages genauer erläutern, oft mit Anwendungsbeispielen. Wir können diese Vignetten über den Befehl vignette() öffnen, wobei wir dafür den Namen der Vignette kennen müssen – viele Packages bieten daher eine Vignette an, die nach dem Package selbst benannt ist. Alternativ öffnet sich über browseVignettes("package_name") in einem Webbrowser eine Übersicht über alle Vignetten, die zu einem bestimmten Package gehören.

Öffnen wir einmal die Vignette unseres neues Packages tibble:

vignette("tibble")

Wir erfahren also, dass das tibble-Package einen “modern take on data frames” einführt. Neben einigen technischen Details zeichnen sich “Tibbles” vor allem durch eine schickere Darstellung in der R-Konsole aus. Schauen wir uns das doch einmal an – die Funktion, um einen Dataframe in ein Tibble umzuwandeln lautet as_tibble():

as_tibble(iris)
## # A tibble: 150 x 5
##    Sepal.Length Sepal.Width Petal.Length Petal.Width Species
##           <dbl>       <dbl>        <dbl>       <dbl> <fct>  
##  1          5.1         3.5          1.4         0.2 setosa 
##  2          4.9         3            1.4         0.2 setosa 
##  3          4.7         3.2          1.3         0.2 setosa 
##  4          4.6         3.1          1.5         0.2 setosa 
##  5          5           3.6          1.4         0.2 setosa 
##  6          5.4         3.9          1.7         0.4 setosa 
##  7          4.6         3.4          1.4         0.3 setosa 
##  8          5           3.4          1.5         0.2 setosa 
##  9          4.4         2.9          1.4         0.2 setosa 
## 10          4.9         3.1          1.5         0.1 setosa 
## # ... with 140 more rows

Im Gegensatz zu Dataframes sehen wir auf den ersten Blick folgende Unterschiede:

  • Wir erhalten zunächst eine Zeile mit den Dimensionen des Datensatzes: A tibble: 150 x 5
  • Unter der Kopfzeile sind die Objekttypen der jeweiligen Spalten aufgelistet, hier also dbl (für double) und fct (für factr).
  • Standardmäßig werden nur die ersten 10 Zeilen des Datensatzes angezeigt, sodass uns bei langen Datensätzen nicht die Konsole vollläuft.
  • hier nicht sichtbar: negative Zahlen und fehlende Werte werden farbig hervorgehoben

Wir werden zukünftig viel mit Tibbles arbeiten, doch nun erst einmal zurück zur Package-Nutzung: Bisweilen lohnt es sich nicht, das gesamte Package zu laden, da Sie nur einmal eine einzige Funktion daraus benötigen. In diesem Fall lassen sich die Funktionen installierter Packages auch ohne library() nutzen, indem die Funktion über das Format package_name::funktionsname() aufgerufen wird:

tibble::as_tibble(iris)
## # A tibble: 150 x 5
##    Sepal.Length Sepal.Width Petal.Length Petal.Width Species
##           <dbl>       <dbl>        <dbl>       <dbl> <fct>  
##  1          5.1         3.5          1.4         0.2 setosa 
##  2          4.9         3            1.4         0.2 setosa 
##  3          4.7         3.2          1.3         0.2 setosa 
##  4          4.6         3.1          1.5         0.2 setosa 
##  5          5           3.6          1.4         0.2 setosa 
##  6          5.4         3.9          1.7         0.4 setosa 
##  7          4.6         3.4          1.4         0.3 setosa 
##  8          5           3.4          1.5         0.2 setosa 
##  9          4.4         2.9          1.4         0.2 setosa 
## 10          4.9         3.1          1.5         0.1 setosa 
## # ... with 140 more rows

Dies ist vor allem dann sinnvoll, wenn Sie in einem Skript viele verschiedene Packages nutzen: Da es durchaus vorkommen kann, dass mehrere Packages denselben Funktionsnamen nutzen, kann das Laden vieler unterschiedlicher Packages dazu führen, dass die eigentlich gewünschte Funktion aus Package 1 durch eine gleichnamige Funktion aus Package 2 “überschrieben” wird – eine häufige Fehlerquelle.