Warum heißen sie so?! – Ursprung und Bedeutung von R-Paketnamen


Als ich mit R angefangen habe, stellte ich schnell fest, dass ein Paketname häufig eine besondere Bedeutung hat. Zum Beispiel war das erste Paket, das ich jemals installiert habe, foreign. Der Name bezieht sich auf seine Fähigkeit, Daten aus anderen „fremden“ Quellen in R zu lesen und zu schreiben. Während dieser und viele andere Namen ziemlich selbsterklärend sind, gibt es wiederum andere, die deutlich weniger intuitiv sind. Der Name eines Pakets erzählt oft eine Geschichte, die von einer allgemeinen Eigenschaft seiner Funktionen inspiriert ist. Und manchmal verstehe ich die tiefere Bedeutung einfach nicht – weil Englisch nicht meine Muttersprache ist.
In diesem Blogpost werde ich etwas Licht in die wunderbare Welt der Paketnamen bringen. Nach dieser kleinen Reise wirst du nicht nur die Kreativität der R-Paketentwickler:innen bewundern, sondern vielleicht auch König oder Königin beim nächsten Klassentreffen sein! Oder zumindest beim nächsten R-Meetup.
Bevor wir anfangen – und ich weiß, du möchtest am liebsten gleich weiterlesen – habe ich zwei Anmerkungen zu diesem Artikel. Erstens: Manchmal verweise ich auf offizielle Erklärungen von den Autor:innen oder anderen Quellen; ein anderes Mal ist es einfach meine persönliche Erklärung dafür, warum ein Paket so heißt, wie es heißt. Wenn du es besser weißt oder etwas ergänzen möchtest – zögere nicht, mich zu kontaktieren. Zweitens: Es gibt derzeit 15.341 Pakete auf CRAN, und ich bin mir sicher, dass es weitaus mehr Namensrätsel und kreative Einfälle zu entdecken gibt, als ein neugieriger Blogleser auf einmal verdauen möchte. Daher habe ich mich auf die bekanntesten Pakete konzentriert und einige meiner persönlichen Favoriten ergänzt.
Aber genug geredet – los geht’s!
dplyr (diːˈplaɪə)

Dir ist vielleicht aufgefallen, dass viele Pakete den String plyr enthalten, z. B. dbplyr, implyr, dtplyr und so weiter. Dieses Homophon von „pliers“ (Zange) bezieht sich auf die Verfeinerung der apply-Funktionen aus Base R im Sinne der „split-apply-combine“-Strategie. Anstatt alle Schritte der Datenanalyse und -bearbeitung auf einmal durchzuführen, zerlegt man das Problem in handhabbare Teile, wendet eine Funktion auf jedes Teilstück an und kombiniert anschließend alles wieder zusammen. Wir sehen diesen Ansatz in Perfektion, wenn wir den Pipe-Operator verwenden. Der erste Teil jedes Paketnamens verweist einfach auf das Objekt, auf das er angewendet wird. Also steht d für data frames, db für Datenbanken, im für Apache Impala, dt für data tables und so weiter… Quellen: Hadley Wickham
lubridate (ˈluːbrɪdeɪt)

Dieses wunderbare Paket macht das Arbeiten mit Daten und Zeiten in R unglaublich einfach und geschmeidig. Man könnte sagen, es läuft wie ein Uhrwerk. Im Deutschen gibt es ein Sprichwort mit ähnlicher Bedeutung („Das läuft wie geschmiert“), das man wörtlich übersetzen könnte mit: „It works as lubricated.“
ggplot2 (ʤiːʤiːplɒt tuː)

Leland Wilkinson schrieb ein Buch, in dem er verschiedene Bestandteile definierte, aus denen ein umfassendes Diagramm besteht. Man muss die Daten festlegen, die dargestellt werden sollen, die Art des Diagramms, z. B. Punkte oder Linien, die Skalierungen der Achsen, die Legende, Achsentitel usw. Diese Bestandteile, die er „layers“ nannte, sollten übereinander aufgebaut werden. Der Titel dieser einflussreichen Arbeit lautet Grammar of Graphics. Hat man das Konzept einmal verstanden, ermöglicht es, komplexe und zugleich aussagekräftige Diagramme mit konsistentem Stil über verschiedene Pakete hinweg zu erstellen. Denn diese Logik wurde auch von vielen anderen Paketen übernommen, wie plotly, rBokeh, visNetwork oder apexcharter. Quellen: ggplot2
data.table (ˈdeɪtə ˈteɪbl) – logo

Okay, ganz offen gesagt: Ich bin ein tidyverse-Typ, und einer meiner Söhne soll Hadley heißen. Mindestens einer. Aber das heißt nicht, dass ich das sehr leistungsstarke Paket data.table nicht schätze. Gelegentlich erlaube ich mir, seine Funktionen zu nutzen, um die Performance meines Codes zu verbessern (hallo fread() und rbindlist()). Der Name selbst ist ziemlich selbsterklärend – aber ist dir aufgefallen, wie cool das Logo ist?! Klar, da steht „data.table“ und es gibt die eckigen Klammern, die grundlegend für die Syntax von data.table sind. Ebenso ist dort der „assignment by reference“-Operator zu sehen, auch bekannt als walrus-operator. „Moment, stopp,“ sagt dein innerer Meeresbiologe, „ist das da oben nicht ein Seelöwe?!“ Ganz genau! Der Seelöwe soll unterstreichen, dass es sich um ein R-Paket handelt, denn natürlich ruft er: R! R!. Quelle: Rdatatable
tibble (tɪbl)

Reguläre Data Frames aus base R sind ganz nett, aber hast du schon einmal einen Data Frame in der Konsole ausgegeben, ohne zu wissen, dass er 10 Millionen Zeilen lang ist? Viel Glück dabei, R zu unterbrechen, ohne gleich die ganze Session zu beenden. Das ist vielleicht einer der Gründe, warum im tidyverse ein anderer Typ von Data Frames verwendet wird: tibbles. Der Name tibble könnte einfach von seiner Ähnlichkeit zu „table“ stammen, aber ich vermute, da steckt mehr dahinter, als man auf den ersten Blick denkt. Hast du schon einmal die Geschichte von Tibbles und dem Zaunkönig von Stephen Island gehört? Nein? Dann nehme ich dich mit nach Neuseeland, ins Jahr 1894. Zwischen der Nord- und Südinsel Neuseelands liegt eine kleine, unbewohnte Insel: Stephen Island. Ihre Felsen wurden schon vielen armen Seelen zum Verhängnis, die versuchten, die Cookstraße zu überqueren. Deshalb wurde beschlossen, einen Leuchtturm zu bauen, damit Schiffe künftig sicher und unbeschadet vorbeifahren konnten.

Aufgrund ihrer Isolation war Stephen Island der einzige Lebensraum vieler seltener Arten. Eine davon war Lyall’s Wren, ein kleiner, flugunfähiger Sperlingsvogel. Er kannte keine Fressfeinde und lebte ein Leben in Freude und Harmonie, bis… der erste Leuchtturmwärter ankam. Sein Name war David Lyall, und er war ein Mann mit Interesse an Naturkunde – und, angesichts der bevorstehenden langen und einsamen Zeit auf der Insel, Besitzer einer Katze. Diese Katze war nicht damit zufrieden, Herrn Lyall zu trösten und Strandspaziergänge zu genießen. Kurz nach ihrer Ankunft bemerkte Herr Lyall die Kadaver kleiner Vögel, offenbar von einem erbarmungslosen Räuber abgeschlachtet. Als Biologieinteressierter fand er heraus, dass es sich bei diesen kleinen Vögeln um eine eigenständige Art handelte. Er konservierte einige Kadaver in Alkohol und schickte sie an einen Freund. Das war im Oktober 1894. Ein wissenschaftlicher Artikel über den Zaunkönig wurde in einer ornithologischen Zeitschrift veröffentlicht, was das Exemplar bald zu einem begehrten Sammlerstück machte. Der neuseeländische Sommer ging weiter, und im Februar 1895 trafen vier Vogelbeobachter auf Stephen Island ein. Sie suchten diesen niedlichen kleinen Zaunkönig und fanden… keinen. Innerhalb weniger Monate ließ Herr Lyalls hungrige Katze die ganze Art aussterben. Am 16. März 1895 schrieb die Christchurch-Zeitung The Press: „Es gibt sehr gute Gründe zu glauben, dass der Vogel auf der Insel nicht mehr anzutreffen ist, und da er nirgendwo sonst bekannt ist, scheint er vollständig ausgestorben zu sein. Das ist vermutlich ein Rekord in Sachen Ausrottung.“ Der Name der Katze? Tibbles. Quellen: Wikipedia; All About Birds; Oddity Central Hinweis: der Kühlschrank von Hadley Wickhams Eltern
purrr (pɜːɜː)

Diese Erweiterung der apply-Funktionen von base R ist in letzter Zeit eine meiner Favoriten. Die kompakte Anwendung von purrr ermöglicht mächtige funktionale Programmierung, die deinen Code schneller, lesbarer und stabiler macht. Oder wie es Mr. Wickham ausdrückt: Sie lässt „deine reinen R-Funktionen schnurren“. Beachte auch das parallelisierte Schwesterpaket furrr. Quellen: Hadley Wickham
Amelia (əˈmiːlɪə)

Während meines Masterstudiums hatte ich einen Kurs über fehlende Daten und multiple Imputation. Eines der Pakete, das wir benutzten – oder besser gesagt analysierten – war Amelia. Es stellte sich heraus, dass dieses Paket nach einer beeindruckenden Frau benannt ist: Amelia Earhart. Sie lebte im frühen 20. Jahrhundert und war eine Pionierin der Luftfahrt und Feministin. Sie war die erste Frau, die allein über den Atlantik flog – eine bemerkenswerte Leistung und eine Inspiration für Frauen, eine technische Karriere zu beginnen. Leider verschwand sie bei einem Flug über dem zentralen Pazifik im Alter von 39 Jahren – und ist damit… missing. ba dum-tss Quelle: Gary King – Mitautor
magrittr (maɡʁitə)

Die Kürze und Eleganz beim Programmieren mit dplyr oder seinen Geschwistern ist ohne den Pipe-Operator %>% kaum vorstellbar. Er erlaubt es, Code von oben nach unten und von links nach rechts zu schreiben und zu lesen – genau wie normalen Text. Pipes sind keine Besonderheit von R, und doch bin ich mir sicher, dass René Magritte an nichts anderes dachte, als er 1929 La trahison des images malte – mit dem Slogan: „Ceci n’est pas une pipe“. Die Logodesigner nahmen nur eine kleine Anpassung an seinem Bild vor. Oder sollte ich sagen: Sie legten die Bedeutung frei, die schon immer dahintersteckte?! Quellen: Vignette, revolutionanalytics.com
batman (ˈbætmən)

Data Science kann richtig Spaß machen – wenn nur die Daten nicht wären. Besonders bei der Arbeit mit Textdaten können Tippfehler und inkonsistente Codierungen sehr mühsam sein. Zum Beispiel: Du hast Fragebogendaten mit Ja/Nein-Fragen. Für R entspricht das TRUE/FALSE, aber wer schreibt das schon so in einen Fragebogen? Tatsächlich wird bei dem Versuch, solche Daten mit as.logical() in logische Werte umzuwandeln, fast jeder String zu NA. Verloren und verdammt? NEIN! Denn wer ist besser geeignet, echte NA’s zu erkennen, als nananananana… batman!
Homeric (həʊˈmɛrɪk)

Hey, du bist wirklich bis ganz nach unten gekommen?! Du hast dir eine kleine Belohnung verdient! Wie wäre es mit einem weichen, süßen, besonders bunt bestreuselten Donut? Und wer könnte ihn dir besser überreichen als der wohl bekannteste Donut-Liebhaber: Homer Simpson! Greif einfach zu: Homeric::PlotDoughnut(1, col = "magenta") Quelle: Homeric Documentation
fcuk (fʌk)

Error in view(my_data): could not find function "view"
Hast du genug von dieser oder ähnlichen Fehlermeldungen? Verwendest du regelmäßig deinen umfassenden Vorrat an Schimpfwörtern, um die Absurdität uneinheitlicher Schreibweisen in camelCase oder snake_case zwischen verschiedenen Paketen zu kommentieren? Oder tippst du einfach schneller als dein Schatten und verursachst dadurch kleine Tippfehler in deinem sonst hervorragenden Code? Es gibt Hilfe! Installiere einfach das großartige fcuk-Paket – und nutzlose Fehlermeldungen gehören der Vergangenheit an.
hellno (hɛl nəʊ)

Versetz dich in die Rolle eines engagierten R-Nutzers. Ich kann mir nur vorstellen, welchen Ärger ich mit einem bestimmten Standardwert eines Arguments in einer base-R-Funktion gehabt haben muss, um ein ganzes Paket zu schreiben, das sich nur mit diesem Fall beschäftigt. Die Rede ist vom Peiniger vieler beginRs bei der Arbeit mit as.data.frame(): stringsAsFactors = TRUE. Aber ich setze ihn nicht nur auf FALSE! Ich erschaffe auch meinen eigenen FALSE-Wert und nenne ihn HELLNO.
Honorable mentions
gremlin
: package for mixed-effects model REML incorporating Generalized Inverses.harrietr
: named after Charles Darwin’s pet giant tortoise. A package for phylogenetic and evolutionary biology data manipulations.beginr
: it helps where we’ve all been, searching for ages until settingpch = 16
.charlatan
: worse than creating dubious medicine, this one makes fake data.fauxpas
: explains what specific HTTP errors mean.fishualize
: give your plots a fishy look.greybox
: why just thinking black or white? This is a package for time series analysis.vroom
: it reads data so fast to R, you almost can hear it making vroom vroom.helfRlein
: some little helper functions, inspired by the German word Helferlein = little helper.