Aan de slagGa gratis aan de slag

Wat zegt een naam?

S3 gebruikt een strikte naamgevingsconventie: alle S3-methoden hebben een naam in de vorm generic.class.

Het omgekeerde is niet waar: een functie kan een naam met een punt bevatten zonder een S3-methode te zijn. Dat geldt voor veel functies die al sinds de vroege dagen van de S-taal bestaan. Zo is all.equal() (docs) eigenlijk een S3-generic, geen methode. (Dit is een voorbeeld van hoe leopard.case verwarrend kan zijn.)

Je kunt controleren of een functie een S3-generic is door is_s3_generic() (docs) uit het pryr-pakket aan te roepen. Je kunt de functie ook printen (door de naam in de console te typen) en vervolgens kijken of deze UseMethod() aanroept.

Op dezelfde manier kun je controleren of een functie een S3-methode is door is_s3_method() (docs) uit pryr aan te roepen. Bijvoorbeeld,

library(pryr)
is_s3_generic("t")           # generieke transponeringsfunctie
is_s3_method("t.data.frame") # transposeermethode voor data.frames
is_s3_method("t.test")       # een functie voor Student's t-toetsen 

Welke beweringen zijn waar?

  1. is.complex() (docs) is een methode van de is-generic die werkt op complex-objecten.
  2. seq.Date() (docs) is een methode van de seq-generic die werkt op Date-objecten.
  3. is.na.data.frame() (docs) is een methode van de is.na-generic die werkt op data.frame-objecten.
  4. sort() (docs) is een generieke functie.
  5. order() (docs) is een generieke functie.

Deze oefening maakt deel uit van de cursus

Objectgeoriënteerd programmeren met S3 en R6 in R

Cursus bekijken

Praktische interactieve oefening

Zet theorie om in actie met een van onze interactieve oefeningen.

Begin met trainen