Skapa en S3-metod (2)
Om ingen lämplig metod hittas för en generisk funktion kastas ett fel. För tillfället har till exempel get_n_elements() bara en metod tillgänglig för data.frames. Om du skickar en matris till get_n_elements() i stället visas ett fel.
> get_n_elements(matrix())
Error: no applicable method for 'get_n_elements' applied to an object of class "c('matrix', 'array', 'logical')"
I stället för att skriva dussintals metoder för varje typ av indata kan du skapa en metod som hanterar alla typer som saknar en specifik metod. Den kallas för standardmetoden och har alltid namnet generic.default. Till exempel skriver print.default() (docs) ut vilket objekt som helst som saknar en egen print()-metod (docs).
Den här övningen är en del av kursen
Objektorienterad programmering med S3 och R6 i R
Övningsinstruktioner
Den generiska funktionen get_n_elements() och en metod för data.frames har redan definierats i din arbetsyta.
- Använd
ls.str()(docs) för att utforska din arbetsyta. - Skriv en S3-standardmetod för
get_n_elements().- Funktionens namn ska vara den generiska funktionens namn, följt av
.och sedandefault. - Indataargumenten ska vara
xoch.... - Funktionskroppen ska bestå av en enda rad som returnerar antalet element i ett godtyckligt objekt. Använd samma teknik som i schackexemplet i övningen Make it Classy (1).
- Funktionens namn ska vara den generiska funktionens namn, följt av
- Anropa din metod på datamängden
ability.cov(docs) och tilldela resultatet till variabelnn_elements_ability.cov.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
# View predefined objects
___
# Create a default method for get_n_elements
___ <- ___
# Call the method on the ability.cov dataset
n_elements_ability.cov <- ___