Eigene R-Pakete erstellen: Warum und wann?

Warum und wann ist es sinnvoll, eigene R-Pakete zu erstellen? Dieser Beitrag richtet sich an R-Anwender, die regelmäßig R-Code schreiben (oder vorhandenen Code anpassen), vielleicht auch schon eigene Funktionen geschrieben haben – aber es bisher nicht als ihre Aufgabe gesehen haben, ein eigenes R-Paket zu erstellen. Finden Sie sich in dieser Beschreibung wieder? Dann ist genau jetzt ein guter Zeitpunkt, umzudenken!

Wann es sich lohnt, ein eigenes R-Paket zu erstellen

Wenn einer oder mehrere der folgenden Punkte zutreffen, dann sollten Sie ein eigenes R-Paket erstellen: Wenn …

  • … Sie auf einfache Weise Code wiederverwenden wollen
  • … Sie Zeit darauf verwenden, Funktionen zwischen verschiedenen Dateien zu kopieren und einzufügen
  • … Sie eine zentrale Stelle benötigen, R-Code (Funktionen) zu verwalten
  • … Sie mit anderen in fortlaufenden Projekten zusammenarbeiten
  • … Sie Ihre Funktionen übersichtlich dokumentieren möchten
  • … Sie Ihren R-Code standardisieren wollen
    (z. B. konsistentes Layout für Diagramme)
  • … Sie Daten (die sich nicht kurzfristig ändern) zentral verwalten und dokumentieren möchten
    (etwa Beispieldaten, mit denen man die Anwendung eigener Funktionen, Diagramme etc. zeigen kann)

Quelle: Tweet von Caitlin Hudon nach einem Vortrag von Corinne Leopold (mit eigenen Ergänzungen)

Ein eigenes R-Paket erstellen: Nur was für Super-Profis?

Ich gestehe: Ich gehöre auch zu denen, die lange dachten: R-Pakete erstellen ist was für Super-Profis / Nerds / R-Insider – zu der Kategorie zähle ich mich nicht, sollen die mal machen …

Gerade in letzter Zeit wird in der R-Community intensiv daran gearbeitet, die Hürde zur Erstellung von R-Paketen immer kleiner zu machen: durch R-Pakete, die die Paket-Erstellung unterstützen, und durch Workshops / Tutorials / Blogbeiträge usw., die Mut machen.

Sebastién Rochette, Mitarbeiter der französischen R-Firma thinkr (und Kollege des vielleicht noch bekannteren Colin Fay) brachte es (sinngemäß) so auf den Punkt:

Sie können ein R-Paket erstellen, wenn …

… Sie in ihrer bisherigen Karriere mindestens eine R-Code-Zeile geschrieben haben.

Siehe Beitrag auf R-Bloggers

R-Paket vs. eigene Funktionen ohne Paket

Welche Vorteile hat ein eigenes R-Paket konkret? Der folgende Screenshot zeigt eine Reihe eigener Funktionen (etwas fantasielos von meine_funktion1 bis …10 benannt; daran sieht man auch die etwas unglückliche alphabetische Sortierung, die meine_funktion10 vor meine_funktion2 einordnet):

Eigene R-Funktionen, die nicht in einem Paket liegen, füllen die Arbeitsumgebung (Environment) und werden schnell unübersichtlich

So zu arbeiten, bringt einige Nachteile mit sich:

  • Das Skript bzw. die Skripte, die den Funktionscode enthalten, müssen in jeder R-Session ausgeführt werden, um die Funktionen verfügbar zu machen
  • Funktionen füllen die Arbeitsumgebung (Environment) – das kann schnell unübersichtlich werden
  • Dokumentation: Kommentare im Skript?

Die Dokumentation ist ein wesentlicher Punkt: Man sollte dabei nicht nur an (etwaige) Kollegen denken, sondern nicht zuletzt auch an „future me“, das künftige Selbst: Wissen Sie nach 2 Wochen, 6 Monaten, 2 Jahren noch genau, wie ihre Funktionen arbeiten, wie die Parameter gemeint sind, was man beachten muss? Alte Skripte zu suchen und dann Schritt für Schritt nachzuvollziehen, kann mühsam sein. Finden Sie überhaupt auf Anhieb den richtigen Ordner, in dem das Skript liegt? Ist das sicher die aktuellste Version der Funktion? Und so weiter …

Funktionen in R-Paketen

Liegen die Funktionen dagegen in einem R-Paket, ist die Situation wesentlich komfortabler. Hier als Beispiel das forcats-Paket, das das Arbeiten mit Faktoren (factors, Vektoren mit fest definierten Kategorien) wesentlich erleichtert.

forcats: Viele Funktionen zum Bearbeiten von factors beginnen mit fct_ . So steht mit der in R / RStudio integrierten Hilfe ein Kontextmenü zum schnellen Überblick zur Verfügung.

Eine lange Liste von Funktionen beginnt mit „fct_“. So bietet die Hilfe in RStudio ein Kontextmenü zum schnellen Überblick. Diese Funktionalität kann man auch in eigenen Paketen nutzen!

Allgemeine Dokumentation mit Vignetten

forcats: Vignette zur Einführung

Zudem gibt es die Möglichkeit, neben der Dokumentation für einzelne Funktionen auch eine oder mehrere Vignetten anzulegen. Vorteil: Der Nutzer muss nicht bereits Funktionsnamen kennen, um an die Hilfe zu kommen. In der Vignette kann man allgemein darlegen, welches Problem das Paket löst, für wen es gedacht ist und wie man es anwendet. Vignetten kann man ähnlich wie Berichte bequem mit Markdown aus R heraus erstellen (vergleiche den Beitrag R für Umsteiger von Excel und SPSS: Automatisierte Berichte).

Wer Vignetten bisher nicht kennt: Man kann in R eine Übersicht über Vignetten in installierten Paketen erhalten, indem man browseVignettes() tippt. Spezifischer geht es mit vignette(package = „forcats“), noch spezifischer (wenn man das Thema der Vignette so herausgefunden hat) mit vignette(„forcats“, package = „forcats“).

Dank umfangreicher Unterstützung durch RStudio (Pakete als Projekttyp, benötigte Ordnerstruktur wird automatisch angelegt) und Hilfspakete (devtools, usethis, roxygen2, testthat) ist es einfacher als gedacht, ein eigenes R-Paket zu bauen. Man kann in weniger als fünf Minuten ein R-Paket mit zumindest rudimentärer Dokumentation erstellen, installieren und für andere nutzbar machen! Dazu sollen bei Gelegenheit weitere Blogbeiträge erscheinen. Bis es so weit ist, zwei Videos dazu:

Eigenes R-Pakete erstellen in zwei Minuten

Den Artikel dazu gibt es inzwischen: Ein eigenes R-Paket in zwei Minuten erstellen.

Funktionen in eigenen R-Paketen dokumentieren: Hilfe erstellen

Literaturempfehlung: R Packages von Hadley Wickham und Jenny Bryan. Tipp: Zweite Auflage lesen, die gibt es kostenlos online! Seit der ersten Auflage hat sich einiges getan.

Ein Gedanke zu „Eigene R-Pakete erstellen: Warum und wann?“

Freue mich über Kommentare!