Co se skrývá v názvu?
S3 používá striktní konvenci pojmenování: všechny S3 metody mají název ve tvaru generic.class.
Opačné tvrzení však neplatí: funkce může mít v názvu tečku, aniž by byla S3 metodou. Tak je tomu u mnoha funkcí, které existují od počátků jazyka S. Například all.equal() (docs) je ve skutečnosti S3 generická funkce, nikoliv metoda. (To je dobrý příklad toho, proč může být leopard.case matoucí.)
Zda je funkce S3 generická, zjistíš voláním is_s3_generic() (docs) z balíčku pryr. Můžeš ji také vypsat (zadáním jejího názvu do konzole) a zkontrolovat, jestli volá UseMethod().
Podobně ověříš, zda je funkce S3 metodou, pomocí is_s3_method() (docs) z balíčku pryr. Například:
library(pryr)
is_s3_generic("t") # generic transpose function
is_s3_method("t.data.frame") # transpose method for data.frames
is_s3_method("t.test") # a function for Student's t-tests
Která tvrzení jsou pravdivá?
is.complex()(docs) je metoda generické funkceis, která pracuje s objekty typucomplex.seq.Date()(docs) je metoda generické funkceseq, která pracuje s objekty typuDate.is.na.data.frame()(docs) je metoda generické funkceis.na, která pracuje s objekty typudata.frame.sort()(docs) je generická funkce.order()(docs) je generická funkce.
Toto cvičení je součástí kurzu
Objektově orientované programování s S3 a R6 v R
Interaktivní praktické cvičení
Proměňte teorii v praxi s jedním z našich interaktivních cvičení
Začít cvičení