W R obiekty należą do klas oraz trybów i typów. Klasy mówią coś o strukturze obiektu. S3 i S4 różnią się pod względem klas. W S3 istnieją określone klasy, do których wpada obiekt R. W S4 użytkownik definiuje klasę dla obiektu S4. Klasy w S3 nazywane są klasami nieformalnymi, podczas gdy klasy w S4 nazywane są klasami formalnymi. My zajmiemy się tylko klasą S3.
Podstawowe informacje o klasach
Klasy S3 są atrybutami obiektów S3 i zwykle nie są przypisywane przez użytkownika. Dla danego obiektu klasę obiektu można znaleźć za pomocą funkcji class(). Jeśli obiektowi nie podano klasy w pakiecie, do którego należy obiekt, to klasa obiekt jest tylko trybem obiektu. Na przykład obiekt funkcji trybu ma również funkcję klasy. Dane wyjściowe z wielu funkcji będą miały atrybut klasy specyficzny dla funkcji. Na przykład klasa danych wyjściowych z modelu liniowego dopasowana funkcją lm() to lm.
Ponadto obiekty mogą należeć do więcej niż jednej klasy. Przykładem jest dopasowanie modelu przy użyciu uogólnionej funkcji modelu liniowego glm(). Klasy danych wyjściowych to glm i lm. Z technicznego punktu widzenia, zgodnie ze stroną pomocy dla class (), klasy obiektu to klasy, z których dziedziczy obiekt. Zatem dane wyjściowe lm () dziedziczą po lm, a dane wyjściowe od glm() dziedziczą zarówno od lm, jak i glm.
Jedną przydatną funkcją dla klas są metody funkcji (). Wstępowanie metody (klasa = nazwa), gdzie nazwa jest nazwą klasy, pokażą funkcje napisane specjalnie w celu zastosowania do obiektów klasy. Na przykład:
> methods(class=matrix)
[1] anyDuplicated.matrix as.data.frame.matrix as.raster.matrix*
[4] boxplot.matrix determinant.matrix duplicated.matrix
[7] edit.matrix* head.matrix isSymmetric.matrix
[10] relist.matrix* subset.matrix summary.matrix
[13] tail.matrix unique.matrix
Non-visible functions are asterisked
Wpisanie ?class w wierszu R daje więcej informacji o klasach i dziedziczeniu.