Slovník | Vyhledávání | Mapa webu
 
Základy informatiky pro biologyCvičebnice jazyka R Dokumentace k základním funkcím class

class

Objektové třídy

class {base} Dokumentace R v češtině

Popis

R má jednoduchý mechanismus generických funkcí, který lze použít pro objektově orientovaný styl programování. Metoda odeslání probíhá na základě třídy prvního argumentu generické funkce.

Použití

class(x)
class(x) <- value
unclass(x)
inherits(x, what, which = FALSE)

oldClass(x)
oldClass(x) <- value

Argumenty

x

objekt R

what, value

znakový vektor jmenující třídy. value může být také NULL.

which

proměnná typu logical, která ovlivňuje návratovou hodnotu: viz ‘Detaily’.

Detaily

Zde popisujeme tzv. “S3” třídy (a metody). Pro “S4” třídy (a metody), viz ‘Formální třídy’ níže.

Mnoho objektů R má atribut třída, znakový vektor, který udává názvy tříd, ze kterých objekt dědí. (Funkce oldClass a oldClass<- získají a nastaví atribut, co lze také provést přímo.)

Pokud objekt nemá atribut třída, má implicitní třídu, zejména "matice", "pole", "funkce" nebo "numeric" nebo výsledek typeof(x) (který je podobný mode(x)), ale ne pro typ "jazyk" a "volání" mode, kde existují následující další třídy pro odpovídající volání funkcí: if, while, for, =, <-, (, {, call.

Všimněte si, že objekty NULL nemohou mít atributy (tedy ne třídy) a pokus o přiřazení třídy je chyba.

Když se na objekt s atributem třídy c("first", "second") použije obecná funkce fun, systém vyhledá funkci nazvanou fun.first a pokud ji najde, použije ji na objekt. Pokud není nalezena žádná taková funkce, vyzkouší se funkce nazvaná fun.second. Pokud žádný název třídy nevytváří vhodnou funkci, použije se funkce fun.default (pokud existuje). Pokud neexistuje atribut třída, je zkoušena implicitní třída, pak výchozí metoda.

Funkce class vytiskne vektor názvů tříd, ze kterých objekt dědí. Podobně, class<- nastavuje třídy, ze kterých dědí objekt. Přiřazení NULL odebere atribut třída.

unclass vrací (kopie) svého argumentu s odebraným atributem třída. (Není dovoleno pro objekty, které nelze kopírovat, tzn. prostředí a externí ukazatele.)

inherits označuje, zda svůj první argument zdědí z kterékoliv třídy specifikované v argumentu what. Pokud je which TRUE pak je vrácen vektor typu integer stejné délky jako what. Každý prvek označuje polohu v class(x), která odpovídá prvku what; nula označuje žádnou shodu. Pokud je which FALSE, pak je pomocí inherits vrácena TRUE, jestliže některý z názvů what odpovídá kterékoli class.

Všechny až na inherits jsou primitivní funkce.

Formální třídy

Další mechanismus formálních formálních tříd, přezdívaný “S4”, je dostupný v balíčku methods který je standardně připojen. Pro objekty, které mají formální třídu, je její název vrácen pomocí class jako znakový vektor délky jedna a odeslání metody se může odehrat na několika argumentech namísto pouze prvního. Výběr metody S3 se však pokouší zacházet s objekty ze třídy S4, jako by měli odpovídající atribut třídy S3, jak to dělá inherits. Proto lze pro třídy S4 definovat metody S3. Podívejte se na stránky nápovědy ‘Introduction’ a ‘Methods_for_S3’ pro základní informace o metodách S4 a o vztahu mezi nimi a metodami S3.

Náhradní verze funkce nastavuje třídu na poskytnutou hodnotu. Pro třídy, které mají formální definici a přímo nahrazují tuto třídu, je silně zastaralá. Výraz as(object, value) je způsob, jak konvertovat objekt na určitou třídu.

Analog inherits pro formální třídy je is. Dvě funkce se chovají konzistentně s jednou výjimkou: třídy S4 mohou mít podmíněnou dědičnost s explicitním testem. V tomto případě is otestuje podmínku, ale inherits ignoruje všechny podmíněné nadtřídy.

Poznámka

Funkce oldClass a oldClass<- se chovají stejným způsobem jako funkce těchto jmen v S-PLUS 5/6, ale v R UseMethod odesílá třídy jako vrácené pomocí class (s některými interpolovanými třídami: viz odkaz) spíše než oldClass. Avšak, skupinové generika odesílají oldClass pro efektivitu, a vnitřní generika pouze odesílají na objekty, pro které je is.object true.

Ve starších verzích R, přiřazení vektoru s nulovou délkou s class odstranilo třídu: nyní je to chyba (zatímco stále funguje pro oldClass). Je jasnější vždy přiřadit NULL k odstranění třídy.

Viz také

UseMethod, NextMethod, ‘group generic’, ‘internal generic’

Příklady

x <- 10
class(x) # "numeric"
oldClass(x) # NULL
inherits(x, "a") #FALSE
class(x) <- c("a", "b")
inherits(x,"a") #TRUE
inherits(x, "a", TRUE) # 1
inherits(x, c("a", "b", "c"), TRUE) # 1 2 0

class( quote(pi) ) # "name"
## běžné volání
class( quote(sin(pi*x)) ) # "class"
## speciální volání
class( quote(x <- 1) ) # "<-"
class( quote((1 < 2)) ) # "("
class( quote( if(8<3) pi ) ) # "if"

 
vytvořil Institut biostatistiky a analýz Lékařské fakulty Masarykovy univerzity