Aan de slagGa gratis aan de slag

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

Cursus bekijken

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 dan default.
    • De invoerargumenten moeten x en ... 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).
  • Roep je methode aan op de ability.cov (docs)-gegevensset en ken het resultaat toe aan de variabele n_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 <- ___
Code bewerken en uitvoeren