R-Zertifizierung abgeschlossen: Objektorientiertes Programmieren in R mit S3 und R6.
Hier ging es mehr als in den bisherigen Kursen um Grundlagen der Programmierung und tiefer in R-Interna. Wer R zur Datenanalyse nutzt (und das tun die allermeisten, dafür wurde die Sprache geschaffen), stützt sich in aller Regel auf funktionales Programmieren. Der Entwickler der S-Sprache, aus der R hervorging, John Chambers, brachte es schön auf den Punkt:
Alles, was existiert, ist ein Objekt.
Alles, was passiert, ist ein Funktionsaufruf.
In R sind selbst unverdächtige Zeichen wie Klammern, Plus-Zeichen etc. Funktionen. Deshalb funktioniert folgender Code:
> 2 + 2 [1] 4 > "+"(2, 2) [1] 4
„+“ ist eine Funktion und kann wie andere Funktionen mit Argumenten in Klammern aufgerufen werden.
Objektorientiertes Programmieren ist für viele Datenanalyse-Aufgaben nicht erforderlich. Jedoch begegnet man überall Objekten – seien es Vektoren, Arrays, Matrizen, Listen, Datensätze, oder komplexere Objekte wie etwa ggplot2-Diagramme.
R verfügt über mehrere Systeme, mit denen man objektorientiert programmieren kann: S3, S4, ReferenceClasses, OOP, R.oo, proto, mutatr, R5, R6. Die meisten sind nicht empfehlenswert: R5, mutatr und OOP wurden aufgegeben. proto lag den Anfängen von ggplot2 zugrunde. R.oo hat sich nicht durchgesetzt.
ReferenceClasses wurden anfänglich für Shiny genutzt, waren jedoch problematisch. Winston Chang entwickelte R6, um einige Schwächen der ReferenceClasses zu überwinden, z. B. Vererbung (inheritance) über Pakete hinweg.
Der Kurs fokussierte sich auf S3 und R6. S3 ermöglicht Funktionen je nach Eingabe unterschiedliches Verhalten. Beispiel: Die print-Funktion reagiert unterschiedlich, je nachdem, was ausgegeben werden soll.