Een S3-methode maken (2)
Als er voor een generic geen geschikte methode wordt gevonden, wordt er een foutmelding gegeven. Op dit moment heeft get_n_elements() bijvoorbeeld alleen een methode voor data.frames. Als je in plaats daarvan een matrix doorgeeft aan get_n_elements(), krijg je een fout te zien.
> get_n_elements(matrix())
Error: no applicable method for 'get_n_elements' applied to an object of class "c('matrix', 'array', 'logical')"
In plaats van tientallen methodes te schrijven voor elk soort input, kun je een methode maken die alle types afhandelt waarvoor geen specifieke methode bestaat. Dit heet de default-methode; die heeft altijd de naam generic.default. Zo zal print.default() (docs) elk type object afdrukken dat geen eigen print() (docs) methode heeft.
Deze oefening maakt deel uit van de cursus
Objectgeoriënteerd programmeren met S3 en R6 in R
Oefeninstructies
De generic get_n_elements()-functie en een methode voor data.frames zijn gedefinieerd in je workspace.
- Gebruik
ls.str()(docs) om je workspace te verkennen. - Schrijf een S3-defaultmethode voor
get_n_elements().- De naam van de functie moet de naam van de generic zijn, dan een
.en dandefault. - De invoerargumenten moeten
xen...zijn. - De body van de functie moet uit één regel bestaan die het aantal elementen in een willekeurig object teruggeeft. Gebruik dezelfde techniek als bij het schaakspel in de oefening Make it Classy (1).
- De naam van de functie moet de naam van de generic zijn, dan een
- Roep je methode aan op de
ability.cov(docs)-gegevensset en ken het resultaat toe aan de variabelen_elements_ability.cov.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
# View predefined objects
___
# Create a default method for get_n_elements
___ <- ___
# Call the method on the ability.cov dataset
n_elements_ability.cov <- ___