6.3 Práce s objekty
Ve většině případů nebudete vytvářet vlastní objekty – stačí, když budete schopní zacházet s objekty, které vrátí funkce, které budete používat.
6.3.1 Jak poznat objekt S3
Poznat, že je něco objekt v systému S3 není úplně snadné. Jsou tři možnosti:
is.object(eva) & !isS4(eva)
## [1] TRUE
pryr::otype(eva) # funkce z balíku pryr
## [1] "S3"
Nebo se samozřejmě podíváte do dokumentace funkce, kterou používáte.
6.3.2 Struktura objektu
Většina objektů systému S3 je postavená nad seznamy, takže jejich strukturu zjistíte funkcí str()
a složky získáte pomocí $
:
str(eva)
## List of 4
## $ name : chr "Eve"
## $ height: num 169
## $ weight: num 52
## $ rank : chr "CEO"
## - attr(*, "class")= chr [1:2] "manager" "human"
eva$height
## [1] 169
6.3.3 Které metody jsou k dispozici
Metody, které patří dané generické funkci vrátí funkce methods()
:
head(methods("print")) # jen prvních 6 metod (zajistí funkce head())
## [1] "print.acf" "print.AES" "print.anova" "print.aov"
## [5] "print.aovlist" "print.ar"
Metody, které jsou k dispozici pro nějakou třídu:
methods(class = "human")
## [1] bmi print
## see '?methods' for accessing help and source code
Jména konkrétních metod lze zjistit také pomocí funkce apropos()
, když se požádá, aby hledala regulární výraz pro cokoli, co končí “.třída_objektu”:
apropos(".*\\.human")
## [1] "bmi.human" "print.human"
6.3.4 Nápověda k metodám
Když hledáte nápovědu ke generické funkci, nemusíte se dozvědět vše, co potřebujete. Pokud chcete nápovědu k tomu, jak se generická funkce chová pro daný objekt, hledejte dokumentaci k jeho metodě.
Později se budeme bavit o tom, jak dělat ekonometrii v R. Výsledkem odhadu lineárního modelu je objekt třídy “lm”. Pro tento objekt existuje mnoho generických funkcí jako je print()
, summary()
a plot()
. Pokud tento objekt vytisknete pomocí funkce plot()
, vykreslí několik diagnostických grafů. Metoda má mnoho parametrů, které však nezjistíte z dokumentace generické funkce plot()
, nýbrž z dokumentace metody plot.lm()
.