Samouczki na temat programowania obiektowego w języku R [zamknięte]

15

Czy istnieją dobre samouczki na temat programowania obiektowego w języku R?

Byłoby wspaniale, gdyby zawierał następujące elementy:

  • jak zdefiniować klasę;
  • różnice między klasami S3 i S4;
  • przeciążenie operatora (chciałbym móc pisać a+bgdzie ai bsą instancjami klasy, o której myślę).
NPE
źródło

Odpowiedzi:

10

Wiki Hadleya Wickhama na temat devtools jest doskonałym źródłem niezbędnych informacji w zwięzłej formie. Jeśli jednak potrzebujesz wyczerpującego zasobu, sekcja OOP instrukcji języka R może być pomocna. Jestem pewien, że bardziej doświadczeni członkowie będą mieli lepsze sugestie.

suncoolsu
źródło
4

Advanced R ” Hadleya Wickhama ma bardzo dobre intro i referencje. Replikuję tę sekcję w celu lepszego indeksowania.

Wybór systemu

Trzy systemy OO to dużo dla jednego języka, ale dla większości programowania R wystarczy S3. W R zazwyczaj tworzysz dość proste obiekty i metody dla wcześniej istniejących funkcji ogólnych, takich jak print (), podsumowanie () i plot (). S3 dobrze nadaje się do tego zadania, a większość kodu OO, który napisałem w R, to S3. S3 jest trochę dziwaczny, ale wykonuje zadanie przy minimum kodu.

Jeśli tworzysz bardziej skomplikowane systemy powiązanych ze sobą obiektów, S4 może być bardziej odpowiednie. Dobrym przykładem jest pakiet Matrix autorstwa Douglasa Batesa i Martina Maechlera. Został zaprojektowany do wydajnego przechowywania i obliczania wielu różnych rodzajów rzadkich macierzy. Od wersji 1.1.3 definiuje 102 klasy i 20 funkcji ogólnych. Pakiet jest dobrze napisany i dobrze skomentowany, a dołączona winieta (winieta („Intro2Matrix”, pakiet = „Matryca”)) daje dobry przegląd struktury pakietu. S4 jest również szeroko stosowany w pakietach Bioconductor, które muszą modelować skomplikowane relacje między obiektami biologicznymi. Bioconductor zapewnia wiele dobrych zasobów do nauki S4. Jeśli opanowałeś S3, S4 jest stosunkowo łatwy do podniesienia; pomysły są takie same,

Jeśli programowałeś w głównym języku OO, RC będzie wyglądać bardzo naturalnie. Ponieważ jednak mogą wprowadzać działania niepożądane poprzez stan zmienny, trudniej je zrozumieć. Na przykład, gdy zwykle wywołujesz f (a, b) w R, możesz założyć, że aib nie zostaną zmodyfikowane. Ale jeśli aib są obiektami RC, mogą zostać zmodyfikowane w tym miejscu. Ogólnie rzecz biorąc, używając obiektów RC, chcesz maksymalnie zminimalizować skutki uboczne i używać ich tylko tam, gdzie stany zmienne są absolutnie wymagane. Większość funkcji powinna być nadal „funkcjonalna” i wolna od skutków ubocznych. To sprawia, że ​​kod jest łatwiejszy do zrozumienia i łatwiejszy do zrozumienia dla innych programistów R.

Odwołuje się do „ Praktycznego samouczka na temat programowania S4 ”.

Istnieje wiele innych interesujących zasobów, jeśli zastosujesz się do jego wskazówek.

John M. Chambers mówi w „Programowaniu obiektowym, programowaniu funkcjonalnym i R” :

Na R duży wpływ miały również idee programowania funkcjonalnego, a zwłaszcza chęć połączenia funkcjonalności z programowaniem obiektowym

Dodałbym coś niezwiązanego bezpośrednio z pytaniem, ale według tego samego pomysłu: „DataFrames in Spark for Large Scale Data Science” . Ponieważ zbliża to Scalę i R, może to wynikać z doskonałej synergii OO / funkcjonalnej.

SemanticBeeng
źródło