LoslegenKostenlos loslegen

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?

  1. is.complex() (Docs) ist eine Methode des Generics is, die auf complex-Objekte wirkt.
  2. seq.Date() (Docs) ist eine Methode des Generics seq, die auf Date-Objekte wirkt.
  3. is.na.data.frame() (Docs) ist eine Methode des Generics is.na, die auf data.frame-Objekte wirkt.
  4. sort() (Docs) ist eine generische Funktion.
  5. order() (Docs) ist eine generische Funktion.

Diese Übung ist Teil des Kurses

Objektorientierte Programmierung mit S3 und R6 in R

Kurs anzeigen

Interaktive Übung

In dieser interaktiven Übung kannst du die Theorie in die Praxis umsetzen.

Übung starten