(II) : Niektóre wspólne klasy

Niektóre popularne klasy S3 to liczby całkowite, numeryczne, macierz i tablica. Obiekty liczb całkowitych i liczbowych klasy są wektorami. Matryce są po prostu tym – obiekty złożone z elementów w rzędach i kolumnach, wszystkie w tym samym trybie. Tablice są jak macierze, ale mogą mieć więcej niż dwa wymiary. Niektóre inne popularne klasy S3 to ts i mts, dla szeregów czasowych; współczynnik, dla czynników; Data dla dat; i POSIXct, dla dat z godzinami, z których wszystkie są numeryczne. Niektóre popularne klasy list trybów to data.frame, dla ramek danych; POSTXlt, dla dat i godzin; i większość danych wyjściowych z funkcji wyższego poziomu w pakietach, takich jak lm i glm.

(II) : Wektory

Chociaż nie ma klasy vector, wektor zasługuje na dyskusję jako jeden z najbardziej podstawowych rodzajów obiektów. W przypadku wektorów klasa jest tylko trybem wektora, z wyjątkiem wektorów całkowitych, które przyjmują klasę integer. Innym powodem, dla którego wektory są ważne, jest to, że dla funkcji as.name(), gdzie name jest nazwą trybu atomowego, z wyjątkiem trybu NULL, as.name() zwraca wektor. Funkcje vector(), as.vector() i is.vector() istnieją i działają nieco jak podobne funkcje dla trybów. Funkcja vector () przyjmuje argumenty mode i length i tworzy wektor o danym trybie i długości. Dopuszczalne tryby to tryby atomowe – z wyjątkiem NULL, tryb listy i tryb wyrażania. Inne tryby dają błąd. W przypadku trybów atomowych

vector(mode=”name”, length=n)

zachowuje się tak samo jak

name(length=n),

gdzie name to nazwa trybu, a n to argument długości. Zauważ, że nazwa musi być w cudzysłowie w wywołaniu vector (). Dla trybu listy funkcja vector () zwraca listę wartości NULL o długości podanej w argumencie length. Przy ustawionym trybie równym wyrażeniu, vector () podaje wyrażenie dla wartości NULL dla argumentów, gdzie liczba NULL jest podanym argumentem długości. Funkcja as.vector() próbuje przymusić obiekt do wektora. W przypadku niektórych obiektów as.vector() po prostu przepuszcza obiekt i nie tworzy wektora. Dla niektórych innych obiektów, zwracany jest błąd, jeśli uruchomiona jest funkcja as.vector(). W przypadku macierzy i tablic informacje o wymiarach są usuwane przez as.vector() (na przykład nazwy kolumn w macierzy oraz liczba wierszy i kolumn) i zwracany jest wektor elementów macierzy lub tablicy. Elementy wektora są uporządkowane zaczynając od pierwszego wymiaru macierzy lub macierzy i kontynuując przez wymiary. Na przykład:

> a = array(1:8,c(2,2,2))

> dimnames(a) = list(c(“d11″,”d12”),c(“d21″,”d22”),

+ c(“d31″,”d32”))

> a

, , d31

d21 d22

d11 1 3

d12 2 4

, , d32

d21 d22

d11 5 7

d12 6 8

> as.vector(a)

[1] 1 2 3 4 5 6 7 8

Tutaj funkcja c() służy do tworzenia wektora wymiarów dla array() 2x2x2 i do tworzenia nazw dla trzech wymiarów tablicy. W przypadku obiektów listy trybów, as.vector() przesyła przez listę. W zależności od struktury listy, is.vector() działający na wyniku może dać TRUE lub FALSE. Tryb się nie zmienia. W przypadku obiektów funkcji mode as.vector () zwraca błąd. W przypadku obiektów wywołania trybu as.vector () przepuszcza obiekt, ale nie tworzy wektora. Tryb się nie zmienia. Dla obiektów o nazwie trybu as.vector() zwraca błąd. W przypadku obiektów wyrażenia trybu as.vector() przekazuje wyrażenie, a wynik daje PRAWDA dla is.vector(). Tryb się nie zmienia. W trybie S4 as.vector() zwraca błąd. Funkcja is.vector() zwraca PRAWDA, jeśli obiekt jest wektorem, a FALSE w przeciwnym razie, chociaż niektóre obiekty, które nie wyglądają jak wektory, zwracają PRAWDA. Więcej informacji na temat vector(), as.vector () i is.vector() można znaleźć, wprowadzając ?vector Po znaku zachęty R.

(II): Klasy Obiektów

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.

(II) : Tryb expression

Tryb expression jest podobny do trybu listy, ale głównie dla obiektów trybów takich jak klasa lub nazwa. Obiekty wyrażenia trybu mogą być podzestawione jak listy i nie są oceniane podczas tworzenia. Tryb wyrażania wykorzystuje trzy funkcje używane przez tryby atomowe: expression(), as.expression() i is.expression(). Funkcja expression() tworzy listę obiektów wprowadzonych do funkcji. Obiekty są oddzielone przecinkami i mogą być w dowolnym trybie. Funkcji eval() można użyć do oceny wyrażenia. Tylko ostatni obiekt w wyrażeniu jest oceniany w ramach eval(). Jeśli ostatni argument składa się z funkcji prymitywnych, eval () zwróci wynik, natomiast jeśli funkcja lub wyrażenie nie jest prymitywne, eval() zwróci wyrażenie. Druga funkcja eval() jest następnie konieczna do oceny funkcji lub wyrażenia. Przykłady:

> a.exp = expression(sin(1:5/180*pi))

> a.exp

expression(sin(1:5/180 * pi))

> eval(a.exp)

[1] 0.01745241 0.03489950 0.05233596 0.06975647 0.08715574

> a.exp = expression(sin(1:5/180*pi),a.call)

> a.exp

expression(sin(1:5/180 * pi), a.call)

> eval(a.exp)

lm(y ~ x)

> eval(eval(a.exp))

Call:

lm(formula = y ~ x)

Coefficients:

(Intercept) x

1 1

> a.exp = expression(a.call,sin(1:5/180*pi))

> eval(a.exp)

[1] 0.01745241 0.03489950 0.05233596 0.06975647 0.08715574

Obiekt trybu nazw da błąd, jeśli zostanie umieszczony jako ostatni argument w analizowanym wyrażeniu. Funkcja as.expression () próbuje zmusić argument do wyrażenia trybu. Tryby NULL, wywołanie, nazwa i pairlist są wymuszane na wyrażenie jednowymiarowe. Tryby atomowe inne niż NULL są wymuszane elementarnie. Listy są wymuszane bez zmian oprócz trybu. Inne tryby obiektów będą dawały błąd, jeśli nastąpi próba przymusu.

Funkcja is.expression () testuje argument i zwraca PRAWDA, jeśli argument jest wyrażeniem trybu, a FALSE w przeciwnym razie. Więcej informacji na temat trybu wyrażania można znaleźć, wprowadzając ?expression  po znaku zachęty R.

Tryb S4

Tryb S4 identyfikuje obiekty, które są używane w nowej wersji R R S4, która używa zupełnie innej składni. Funkcja isS4 () zwraca PRAWDA, jeśli obiekt jest w trybie S4, w przeciwnym razie FALSE. Funkcja mode () zwraca S4, jeśli argumentem jest tryb S4. Więcej informacji można znaleźć, wprowadzając ?S4 po znaku zachęty R.

(II) : Tryb name

Tryb name odnosi się do obiektów, które są nazwami utworzonymi dla i z innych obiektów. W trybie name istnieją tylko funkcje as.name() i is.name(). Nazwy mogą mieć długość do 10 000 bajtów. Funkcja as.name() przyjmuje argumenty, które mogą być logiczne, numeryczne, złożone, surowe, znakowe lub nazwa. Argumenty innych trybów dają błąd. Funkcja używa pierwszego elementu obiektu do przypisania nazwy. Na przykład:

> mat

one two

row1 1 6

row2 2 7

> as.name(mat)

`1`.

Funkcja is.name() sprawdza, czy argument ma nazwę trybu i zwraca PRAWDA, jeśli tak, a FALSE w przeciwnym razie. Zauważ, że nazwa trybu i symbol typu są takie same, ponieważ nazwa. () jest taka sama jak nazwa.symbol (), a is.name () jest taka sama jak is.symbol (). Nazwa trybu to konwencja S3, a symbolem typu jest konwencja S4. Więcej informacji można znaleźć, wprowadzając ? name w wierszu R.

(II) : Tryb call

Obiekty trybu call są nieocenionymi funkcjami z argumentami, jeśli funkcja przyjmuje argumenty. Te same trzy funkcje, które istnieją dla trybów atomowych, istnieją dla trybu wywołania: call(), as.call() i is.call().

Funkcja call() tworzy obiekt wywołania trybu. Pierwszy argument call () to nazwa funkcji w cudzysłowie. Pozostałe argumenty do wywołania to argumenty funkcji. Niektóre przykłady obejmują:

> a.call = call(“lm”, y~x)

> a.call

lm(y ~ x)

> b.call = call(“ls”)

> b.call

ls()

> c.call = call(“ls”, pattern=”abc”)

> c.call

ls(pattern = “abc”)

Zauważ, że obiekt wywołania trybu może zostać oceniony za pomocą funkcji eval(). Jeśli wszystkie zmienne w wywołaniu istnieją w obszarze roboczym, eval() oceni funkcję; w przeciwnym razie eval() spowoduje błąd. Na przykład:

> x

[1] 1 2 3

> y

[1] 2 3 4

> eval(a.call)

Call:

lm(formula = y ~ x)

Coefficients:

(Intercept) x

1 1

> a.call = call(“lm”, z~x)

> z

Error: object ‘z’ not found

> eval(a.call)

Błąd w eval (expr, envir, encos): nie znaleziono obiektu „z”. Funkcja as.call () próbuje przekonać argument do obiektu wywołania trybu. Jeśli argumentem jest lista, następuje konwersja; w przeciwnym razie zwracany jest błąd. Jeśli jednak lista nie zawiera nazwy funkcji, po której następują argumenty tej funkcji, obiekt nie może zostać oceniony. Funkcja is.call () testuje argument i zwraca PRAWDA, jeśli argumentem jest wywołanie trybu, w przeciwnym wypadku FALSE. Więcej informacji na temat wywołania trybu można znaleźć, wprowadzając ?call w wierszu R.

(II) : Tryb function

Funkcje w R dotyczą  trybu function . Spośród funkcji wymienionych dla trybów atomowych istnieje tylko funkcja is .function ) i function() dla trybu function. Funkcja is.function() zwraca TRUE, jeśli argument jest funkcją, a FALSE w przeciwnym razie. Funkcja function() tworzy funkcje, ale struktura funkcji różni się od trybów atomowych i trybu listy, a strona pomocy dla funkcji () różni się od pomocy strony dla is.function(). Kolejnym trybem funkcji jest closure. Tryb closure dotyczy funkcji, które nie są pierwotne – to znaczy są zapisane w kodzie R. Zauważ, że funkcje trybu closure są również trybu  funcntion. Funkcja is.primitive() istnieje, aby sprawdzić, czy funkcja jest pierwotna, ale funkcja is.closure() nie istnieje. Więcej informacji na temat trybu funkcji można znaleźć, wprowadzając ?is.function po znaku zachęty R, co spowoduje wyświetlenie strony pomocy dla is.function().

(II) : Tryb function

Funkcje w R dotyczą  trybu function . Spośród funkcji wymienionych dla trybów atomowych istnieje tylko funkcja is .function ) i function() dla trybu function. Funkcja is.function() zwraca TRUE, jeśli argument jest funkcją, a FALSE w przeciwnym razie. Funkcja function() tworzy funkcje, ale struktura funkcji różni się od trybów atomowych i trybu listy, a strona pomocy dla funkcji () różni się od pomocy strony dla is.function(). Kolejnym trybem funkcji jest closure. Tryb closure dotyczy funkcji, które nie są pierwotne – to znaczy są zapisane w kodzie R. Zauważ, że funkcje trybu closure są również trybu  funcntion. Funkcja is.primitive() istnieje, aby sprawdzić, czy funkcja jest pierwotna, ale funkcja is.closure() nie istnieje. Więcej informacji na temat trybu funkcji można znaleźć, wprowadzając ?is.function po znaku zachęty R, co spowoduje wyświetlenie strony pomocy dla is.function ().

(II) : Wspólne tryby rekurencyjne i językowe

Tryby rekurencyjne i językowe omówione tutaj  to lista, funkcja, wywołanie, wyrażenie i nazwa. Lista trybów, funkcja, wywołanie i wyrażenie są trybami rekurencyjnymi. Tryby wywołania i ekspresji są również trybami językowymi. Nazwa trybu to tryb językowy, ale nie tryb rekurencyjny.

Tryb listy

Listy są kolekcjami obiektów, które mogą być w dowolnym trybie i które nie muszą być w tym samym trybie na liście. Tryb listy ma te same trzy funkcje, co tryby atomowe; jest jednak kilka innych. Tworzenie pustej listy różni się od trybów atomowych. Aby utworzyć listę podanej liczby obiektów, których obiektami są wartości NULL, użyj

wektor („lista”, n),

gdzie n jest liczbą obiektów znajdujących się na liście e. Zmienna n musi być liczbowa, jest zaokrąglana w dół do liczby całkowitej i może zawierać tylko jeden element. Funkcja unlist() usuwa właściwość list dla niektórych list i dla tych list zwraca wektor elementów obiektów na liście. Funkcja alist() tworzy listę, na której nie trzeba określać wartości zmiennych na liście. Funkcja alist() jest najczęściej używana do oceny funkcji, gdzie niektóre zmienne mogą być wstępnie określone, a inne są przypisywane przy każdym uruchomieniu funkcji. Funkcja list() tworzy listę z argumentów funkcji. W nawiasach argumenty są oddzielone przecinkami. Argumentami może być dowolny obiekt. Funkcja as.list() próbuje zmusić argument do listy trybów. Jeśli podano więcej niż jeden argument, wymuszany jest tylko pierwszy argument. Pozostałe argumenty są ignorowane. Funkcja is.list () sprawdza, czy argument jest listą (lub listą par, która nie jest tutaj omawiana). Jeśli obiekt znajduje się na liście trybów, zwracana jest wartość PRAWDA. W przeciwnym razie zwracana jest wartość FAŁSZ. Więcej informacji można znaleźć, wprowadzając listę w wierszu polecenia R, co powoduje wyświetlenie strony pomocy dla list().

(II) : Tryb character

Obiekty w trybie znakowym składają się z ciągów cytowanych. Jeśli obiektem jest tekst, tekst będzie łamany przy każdych 500 znakach, tworząc wektor ciągów. Trzy zwykłe funkcje dotyczą również trybu znaków. Funkcja character() tworzy wektor pustych łańcuchów i przyjmuje tylko argumenty liczbowe, jednoelementowe w trybie. Jeśli argument jest większy lub równy jeden, argument jest zaokrąglany w dół do liczby całkowitej, a funkcja zwraca wektor „” długości równej liczbie całkowitej. Jeśli argument jest mniejszy niż jeden i większy lub równy zero, zwracany jest pusty zestaw znaków o długości zero, character(0). Inne argumenty zwracają błąd. Funkcja as.character() próbuje przekonwertować argument na ciągi. Dla trybów atomowych konwersja jest dosłowna, ale elementy są zwracane w cudzysłowie. W przypadku liczb o podwójnej precyzji stosuje się do 15 cyfr znaczących. W przeciwieństwie do innych trybów atomowych – z wyjątkiem NULL – funkcja as.character() również zwraca wyniki dla niektórych trybów rekurencyjnych. Obiekty listy trybów opisano w następnej sekcji. W tej sekcji listy są kolekcjami obiektów, które mogą być w dowolnym trybie. Funkcja lm () zastosowana w poniższym przykładzie pasuje do modelu regresji liniowej, przy czym wartość po lewej stronie tylda jest zmienną zależną, a wartość z obiektem listy trybów jako argumentem, as.character() może zwrócić niektóre dziwne rzeczy w zależności od listy. Funkcja może zwrócić coś innego niż zwracana, jeśli argument zostanie wprowadzony po znaku zachęty R. Przykłady: po prawej niezależna zmienna. Dane wyjściowe z lm() jest listą.

Pobaw się różnymi listami, aby zobaczyć, jak działa as.character(). Obiekty trybów nazwa, wywołanie i wyrażenie mogą być również zmuszone do postaci. Obiekty trybów działają, a S4 nie może.

Funkcja is.character() sprawdza, czy argument funkcji ma znak trybu, i zwraca TRUE, jeśli tak, a FALSE w przeciwnym razie. Dowolny obiekt może być użyty jako argument. Aby uzyskać więcej informacji o trybie znakowym, wprowadź  ?character Po znaku zachęty R.