Creare un metodo S3 (2)
Se per una generica non viene trovata una modalità adatta, viene generato un errore. Per esempio, al momento get_n_elements() ha una modalità disponibile solo per i data.frame. Se invece passi una matrice a get_n_elements(), vedrai un errore.
> get_n_elements(matrix())
Error: no applicable method for 'get_n_elements' applied to an object of class "c('matrix', 'array', 'logical')"
Invece di dover scrivere decine di modalità per ogni tipo di input, puoi creare una modalità che gestisca tutti i tipi che non hanno una modalità specifica. Questa si chiama modalità default; ha sempre il nome generic.default. Per esempio, print.default() (docs) stamperà qualsiasi tipo di oggetto che non ha un proprio metodo print() (docs).
Questo esercizio fa parte del corso
Programmazione orientata agli oggetti con S3 e R6 in R
Istruzioni dell'esercizio
La funzione generica get_n_elements() e una modalità per i data.frame sono già state definite nel tuo workspace.
- Usa
ls.str()(docs) per esplorare il tuo workspace. - Scrivi una modalità S3 di default per
get_n_elements().- Il nome della funzione deve essere il nome della generica, poi un
.e quindidefault. - Gli argomenti di input devono essere
xe.... - Il corpo della funzione deve essere su una sola riga e restituire il numero di elementi in un oggetto qualsiasi. Usa la stessa tecnica del gioco degli scacchi nell’esercizio Make it Classy (1).
- Il nome della funzione deve essere il nome della generica, poi un
- Chiama la tua modalità sul dataset
ability.cov(docs) e assegna il risultato alla variabilen_elements_ability.cov.
esercizio interattivo pratico
Prova questo esercizio completando questo codice di esempio.
# View predefined objects
___
# Create a default method for get_n_elements
___ <- ___
# Call the method on the ability.cov dataset
n_elements_ability.cov <- ___