Obiekty R istnieją w systemie obiektowym. R ma dwa systemy obiektowe: S3 i S4. S4 to najnowsza wersja R i zawiera nowy sposób podejścia do programowania R. S3 to poprzednia wersja. Obie wersje działają jednocześnie. S4 oferuje nowe potężne metody, ale do korzystania z tych metod konieczna jest solidna znajomość S3. Ta książka koncentruje się głównie na metodach S3, w tym, w stosownych przypadkach, na składni S4.
Przegląd trybów
Tryby opisują rodzaj informacji zawartych w obiekcie i są klasyfikacją na poziomie S3. Tryb obiektu można znaleźć za pomocą funkcji mode(). Klasyfikacja poziomu S4 jest według typu i można ją znaleźć za pomocą funkcji typeof(). Obecnie obiekty R dzielą się na jeden z następujących trybów: NULL, logiczny, numeryczny, złożony, surowy, znak, lista, wyrażenie, nazwa, funkcja, pairlist, język, char, …, środowisko, externalptr, poorref, zamknięcie, kod bajtowy, obietnica i S4. Ponieważ R stale się zmienia, lista trybów może ulec zmianie. Z kilkoma wyjątkami typy i tryby są takie same i większość z nich można znaleźć pod listą typów. Listę typów można znaleźć na stronie pomocy dla typeof () i na http://svn.r-project.org/R/trunk/src/main/util.c, w TypeTable. Do instancji, dla których mode() i typeof() dają różne wyniki, należą: funkcja typeof() zwraca liczbę całkowitą lub podwójną, gdzie mode() zwraca wartość liczbową, typeof() zwraca specjalne lub wbudowane, gdzie mode() zwraca funkcję, a typeof() zwraca symbol, gdzie mode() zwraca nazwę. Strona pomocy dla mode() podaje odniesienie między trybami i typami.
Często używane tryby
Większość użytkowników nigdy nie użyje połowy trybów. Najczęściej używane tryby to NULL, logiczne, numeryczne, złożone, surowe, znakowe, lista, funkcja, wywołanie, nazwa, wyrażenie i S4. Tryb NULL jest trybem innego, niemodalnego, pustego obiektu. Obiekty trybu logicznego zawierają elementy, które mogą przyjmować wartości PRAWDA, FAŁSZ lub NA, gdzie NA oznacza brakującą wartość. Obiekty trybu numerycznego mogą przyjmować liczby całkowite lub rzeczywiste wartości liczbowe lub NA. Obiekty trybu złożonego mogą przyjmować złożone wartości liczbowe lub NA. Obiekty trybu raw składają się z bajtów. NA są ustawione na 00 dla surowych danych. Obiekty postaci trybu składają się z ciągów znaków lub NA. Elementy obiektów znakowych są cytowane, z wyjątkiem NA. Obiekty listy trybów to listy innych obiektów, które mogą znajdować się w dowolnym trybie. Obiektami funkcji trybu są funkcje. Obiekty nazwy trybu to uproszczona nazwa obiektu oparta na pierwszym elemencie obiektu, zakładając, że nie brakuje pierwszego elementu. Obiektami wywołania trybu są funkcje i argumenty. Obiekty wyrażenia trybu to zbiory obiektów, takie jak wywołania i nazwy. Obiekty trybu S4 to obiekty S4, które są złożone (odnoszą się do struktury obiektu, a nie do liczb zespolonych). Źródłami powyższych informacji są strony pomocy dla mode() i typeof().
Tryby atomowy, rekurencyjny i językowy
Tryby występują w trzech rodzajach: atomowym, rekurencyjnym i językowym. Tryby atomowe to NULL, logiczne, numeryczne, złożone, surowe i znakowe. Atom odnosi się do elementów obiektów podobnych do atomów. W przypadku trybów atomowych wszystkie elementy w obiekcie mają ten sam tryb atomowy. Tryby rekurencyjne to zbiory obiektów i mogą zawierać obiekty różnych trybów. Dwa typy trybów rekurencyjnych to lista i funkcja. Większość obiektów, które nie są atomowe, ma charakter rekurencyjny. Tryby językowe to nazwa, połączenie i wyrażenie. Więcej informacji o rodzajach trybów można znaleźć na stronach pomocy funkcji testujących rodzaj trybu obiektu: is.atomic(), is.recursive() i is.language().