Łagodne wprowadzenie do II to uruchamiana Jest funkcja summary.lm(), która prezentuje w tekstowej postaci;'* poszczególni- elementy modelu liniowego (do tego tematu wrócimy w części poświę-| conej statystyce). Innymi, często przeciążanymi funkcjami są predictO, anova(], print O oraz operatory,
Korzystając z funkcji methodsO możemy sprawdzić, czy zadeklarowane są ja-, kies przeciążone wersje interesującej nas funkcji lub też, czy są przeciążone funkia cje dla jakiejś interesującej nas klasy. Warto zobaczyć jaki jest wynik polecenjąl methods(plot), aby przekonać się jak wiele jest przeciążeń funkcji plot O.
> # lista przeciążeń
> mfsthods(plot)
[i] plot.acf*
[4] plot. data. frami 17] plot.default [10] plot.diana*
[13] plot.formula* [16] plot.Im [19] plot.mim [22] plot.P0SIXct* [25] plot.p-fineorap*
plot.agnes* plot.Datę* plot.dendrogram* plot.ecdf plot.hclust* plot.mca* plot.mona* plot.ppr* plot.profile*
przeciążeń funkcji plot (plot)
. acf *
.data.tramo*
■default .diana*
■formula*
. Im .mim
plot.correspondence*
plot.decomposed.ts*
plot.density
plot.factor*
plot.histogram*
plot.medpolish*
plót.partition*
plot.prcomp*
plot.table*
Non-visible functlons ara asterisked
Nie każda funkcja może być przeciążona. Aby R wiedział, że jakaś funkcja jest : generyczna (czyli może być przeciążana) należy zamarkować ją używając funkcji UseMethodO. Kompletny opis działania tej funkcji (a zarazem technicznych aspektów działania funkcji przeciążanych) wykracza poza zakres tej książki, ograniczmy yiS się więc jedynie do przykładu. W poniższym przykładzie funkcja rozmiar () wyzna-'s cza i przekazuje liczbę elementów w danym obiekcie, bez względu czy jest to wektor, macierz czy ramka danych.
> # wskazujemy, żejunkcja rozmiar będzie przeciążana
> rozmiar = fiinction(x) UseMethodCrozmiar”)
> * opisujemy jej domyślne zachowanie
> rozmiar.dafault « function(x) length(x)
> » specyfikujemy jej zachowanie dla konkretnych typów argumentów rozmiar.character - function(x) length(x)
rozmiar.matrlx - function(x) dim(x)[1] * dim(x)[2] rozmiar.array = function(x) prod(dim(x))
# krótki test, wywołujemy tę funkcję dla wektora rozmiar(10:1)
[13 10
> # wywołujemy funkcję 'rozmiar' dla macierzy
> rozmiar(matrix(0,10,10))
[1] 100
Przyśpieszamy
53
1.6.2-4 Funkcje a zasięg
Każdy z trzech operatorów ->, <- i - przypisuje wartości do zmiennej o lokalnym Zasięgu (w aktualnym środowisku używając terminologii R). A więc taki operator użyty w funkcji zmienia wartość zmiennej lokalnie w funkcji. W języku R są dostępne również dwa inne operatory przypisania, mianowicie -» i «-. Ich działanie różni się tym, że przypisują wartość do zmiennej o zasięgu globalnym, a więc zmiany widoczne są poza zakresem funkcji. Warto przeanalizować poniższy przykład.
> f definiujemy nową funkcją, w której będziemy przypisywać wartości ' > przykład 1 <- functionO {
" tt pierwsze przypisanie to normalne, lokalne przypisanie + zmiennal <- 2
+ tt drugie przypisanie to globalne przypisanie, modyfikowana jest '('V zmienna w zewnętrznej przestrzeni nazw . + zmienna2 «~ 2
+ cat(pastę("zmiennal:”.zmiennal,“zmienna2:",zmienna2,“\n"))
+ )■
> # zainicjujmy wartość dwóch zmiennych
> zmiennal * 1
> zmienna2 * 1
> tt stan zmiennych globalnych przed uruchomieniem funkcji
> cat(paste("zmiennal: " .zmiennal, "zmienna2:11 ,zmienna2, “\n")) zmiennal: 1 zmienna2: 1
> tt stan zmiennych lokalnych wewnątrz funkcji
> przykład!O zmiennal: 2 zmienna2: 2
> # stan zmiennych globalnych po uruchomieniu funkcji
> cat (pastę (''zmiennal:" .zmiennal, "zmienna2: " ,zmienna2, "\n")) zmiennal: 1 zmienna2: 2
^ | y Operator * powinien być stosowany tylko w „najbardziej zewnętrznym” — poziomie zagnieżdżenia (tam jest. równoważny operatorom <- i ->). Jeże-
/''■ li wywołujemy funkcję, to w specyfikacji jej argumentów operatory - i <-if mają odmienne znaczenia!!! Operator „strzałkowy” oznacza przypisanie wartości, podczas gdy operator = wskazuje, który argument funkcji jest określany. Różnice te demonstruje poniższy przykład.
> * ta instrukcja się nie wykona,
> tt zostanie zinterpretowana jako próba wskazania wartości argumentu o
nazwie ’liczbyJ, który nie jest argumentem funkcji plot O
> plot(liczby - 1:100)
Error in plot(liczby « 1:100) : argument “x" is missing, with no default
> tt ta instrukcja wykona się poprawnie, operacja podstawienia przekazuje
wynik i to on będzie narysowany na ekranie
> plot(liczby <- 1:100)