Eine S3-Methode erstellen (2)
Wenn für eine generische Funktion keine passende Methode gefunden wird, wird ein Fehler ausgelöst. Zum Beispiel hat get_n_elements() im Moment nur eine Methode für data.frames. Übergibst du stattdessen eine Matrix an get_n_elements(), siehst du einen Fehler.
> get_n_elements(matrix())
Error: no applicable method for 'get_n_elements' applied to an object of class "c('matrix', 'array', 'logical')"
Anstatt Dutzende Methoden für jeden möglichen Eingabetyp zu schreiben, kannst du eine Methode erstellen, die alle Typen behandelt, für die es keine spezifische Methode gibt. Das ist die sogenannte default-Methode; sie heißt immer generic.default. Zum Beispiel gibt print.default() (docs) jeden Objekttyp aus, der keine eigene print() (docs) Methode hat.
Diese Übung ist Teil des Kurses
Objektorientierte Programmierung mit S3 und R6 in R
Anleitung zur Übung
Die generische Funktion get_n_elements() und eine Methode für data.frames sind in deinem Workspace definiert.
- Verwende
ls.str()(docs), um deinen Workspace zu erkunden. - Schreibe eine S3-default-Methode für
get_n_elements().- Der Name der Funktion sollte aus dem Namen der generischen Funktion bestehen, dann einem
.und danndefault. - Die Eingabeargumente sollten
xund...sein. - Der Rumpf der Funktion soll aus einer einzigen Zeile bestehen, die die Anzahl der Elemente in einem beliebigen Objekt zurückgibt. Nutze dieselbe Technik wie beim Schachspiel in der Übung Make it Classy (1).
- Der Name der Funktion sollte aus dem Namen der generischen Funktion bestehen, dann einem
- Rufe deine Methode auf dem Datensatz
ability.cov(docs) auf und weise das Ergebnis der Variablenn_elements_ability.covzu.
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
# View predefined objects
___
# Create a default method for get_n_elements
___ <- ___
# Call the method on the ability.cov dataset
n_elements_ability.cov <- ___