Crearea unei metode S3 (2)
Dacă nu se găsește nicio metodă potrivită pentru o funcție generică, se generează o eroare. De exemplu, în acest moment, get_n_elements() are o metodă disponibilă doar pentru data.frame-uri. Dacă transmiți o matrice funcției get_n_elements(), vei vedea o eroare.
> get_n_elements(matrix())
Error: no applicable method for 'get_n_elements' applied to an object of class "c('matrix', 'array', 'logical')"
În loc să scrii zeci de metode pentru fiecare tip de intrare în parte, poți crea o metodă care gestionează toate tipurile ce nu au o metodă specifică. Aceasta se numește metoda default și are întotdeauna numele generic.default. De exemplu, print.default() (docs) va afișa orice tip de obiect care nu are propria metodă print() (docs).
Acest exercițiu face parte din cursul
Programare orientată pe obiecte cu S3 și R6 în R
Instrucțiuni pentru exercițiu
Funcția generică get_n_elements() și o metodă pentru data.frame-uri au fost deja definite în workspace-ul tău.
- Folosește
ls.str()(docs) pentru a explora workspace-ul. - Scrie o metodă S3 default pentru
get_n_elements().- Numele funcției ar trebui să fie numele genericului, urmat de
., apoi dedefault. - Argumentele de intrare ar trebui să fie
xși.... - Corpul funcției ar trebui să conțină o singură linie, returnând numărul de elemente dintr-un obiect arbitrar. Folosește aceeași tehnică ca la jocul de șah din exercițiul Make it Classy (1).
- Numele funcției ar trebui să fie numele genericului, urmat de
- Apelează metoda pe setul de date
ability.cov(docs) și atribuie rezultatul variabilein_elements_ability.cov.
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
# View predefined objects
___
# Create a default method for get_n_elements
___ <- ___
# Call the method on the ability.cov dataset
n_elements_ability.cov <- ___