Was steckt im Namen?
S3 verwendet eine strikte Namenskonvention: Alle S3-Methoden haben einen Namen der Form generic.class.
Das Umgekehrte gilt nicht: Eine Funktion kann einen Punkt im Namen haben, ohne eine S3-Methode zu sein. Das ist bei vielen Funktionen der Fall, die es schon seit den frühen Tagen der S-Sprache gibt. Zum Beispiel ist all.equal() (Docs) tatsächlich ein S3-Generic, keine Methode. (Das ist ein Beispiel dafür, wie leopard.case verwirrend sein kann.)
Du kannst prüfen, ob eine Funktion ein S3-Generic ist, indem du is_s3_generic() (Docs) aus dem pryr-Paket aufrufst. Du kannst sie auch ausgeben (indem du ihren Namen in die Konsole tippst) und nachsehen, ob sie UseMethod() aufruft.
Ebenso kannst du prüfen, ob eine Funktion eine S3-Methode ist, indem du is_s3_method() (Docs) aus pryr aufrufst. Zum Beispiel,
library(pryr)
is_s3_generic("t") # generische Transpositionsfunktion
is_s3_method("t.data.frame") # Transpositionsmethode für data.frames
is_s3_method("t.test") # eine Funktion für Student's t-Tests
Welche Aussagen sind richtig?
is.complex()(Docs) ist eine Methode des Genericsis, die aufcomplex-Objekte wirkt.seq.Date()(Docs) ist eine Methode des Genericsseq, die aufDate-Objekte wirkt.is.na.data.frame()(Docs) ist eine Methode des Genericsis.na, die aufdata.frame-Objekte wirkt.sort()(Docs) ist eine generische Funktion.order()(Docs) ist eine generische Funktion.
Diese Übung ist Teil des Kurses
Objektorientierte Programmierung mit S3 und R6 in R
Interaktive Übung
In dieser interaktiven Übung kannst du die Theorie in die Praxis umsetzen.
Übung starten