Hadley Wickhams " Advanced R " hat einige sehr gute Intro und Referenzen. Ich repliziere diesen Abschnitt zur besseren Indizierung.
Ein System auswählen
Drei OO-Systeme sind viel für eine Sprache, aber für die meisten R-Programme reicht S3 aus. In R erstellen Sie normalerweise relativ einfache Objekte und Methoden für bereits vorhandene generische Funktionen wie print (), summary () und plot (). S3 ist für diese Aufgabe gut geeignet, und der größte Teil des OO-Codes, den ich in R geschrieben habe, ist S3. S3 ist ein bisschen schrullig, aber es erledigt die Arbeit mit einem Minimum an Code.
Wenn Sie kompliziertere Systeme miteinander verbundener Objekte erstellen, ist S4 möglicherweise geeigneter. Ein gutes Beispiel ist das Matrix-Paket von Douglas Bates und Martin Maechler. Es wurde entwickelt, um viele verschiedene Arten von dünnen Matrizen effizient zu speichern und zu berechnen. Ab Version 1.1.3 werden 102 Klassen und 20 generische Funktionen definiert. Das Paket ist gut geschrieben und kommentiert, und die beiliegende Vignette (Vignette ("Intro2Matrix", package = "Matrix")) gibt einen guten Überblick über die Struktur des Pakets. S4 wird auch in großem Umfang von Bioconductor-Paketen verwendet, die komplizierte Wechselbeziehungen zwischen biologischen Objekten modellieren müssen. Bio-Leiter bietet viele gute Ressourcen zum Lernen von S4. Wenn Sie S3 beherrschen, ist S4 relativ einfach zu erlernen. die ideen sind alle gleich,
Wenn Sie in einer OO-Standardsprache programmiert haben, erscheint RC sehr natürlich. Aber weil sie durch einen veränderlichen Zustand Nebenwirkungen hervorrufen können, sind sie schwerer zu verstehen. Wenn Sie beispielsweise in R normalerweise f (a, b) aufrufen, können Sie davon ausgehen, dass a und b nicht geändert werden. Wenn jedoch a und b RC-Objekte sind, können sie an dieser Stelle geändert werden. Wenn Sie RC-Objekte verwenden, möchten Sie Nebenwirkungen im Allgemeinen so weit wie möglich minimieren und sie nur dort verwenden, wo veränderbare Zustände unbedingt erforderlich sind. Die meisten Funktionen sollten weiterhin „funktionsfähig“ und frei von Nebenwirkungen sein. Dies macht den Code verständlicher und für andere R-Programmierer verständlicher.
Er verweist auf " Ein praktisches Tutorial zur S4-Programmierung ".
Es gibt eine Reihe weiterer interessanter Ressourcen, wenn Sie seinen Hinweisen folgen.
John M. Chambers sagt in "Objektorientierte Programmierung, funktionale Programmierung und R" :
R wurde auch stark von den Ideen der funktionalen Programmierung und insbesondere von dem Wunsch beeinflusst, funktionale mit objektorientierter Programmierung zu kombinieren
Fügen Sie etwas hinzu, das nicht direkt mit der Frage zusammenhängt, sondern mit derselben Idee: "DataFrames in Spark for Large Scale Data Science" . Da dies Scala und R näher bringt, könnte sich daraus eine große OO / funktionale Synergie ergeben.