Crear un método S3 (2)
Si no se encuentra un método adecuado para un genérico, se lanza un error. Por ejemplo, ahora mismo get_n_elements() solo tiene un método disponible para data.frame. Si pasas una matriz a get_n_elements() en su lugar, verás un error.
> get_n_elements(matrix())
Error: no applicable method for 'get_n_elements' applied to an object of class "c('matrix', 'array', 'logical')"
En lugar de tener que escribir decenas de métodos para cada tipo de entrada, puedes crear un método que gestione todos los tipos que no tienen un método específico. A esto se le llama el método por defecto; siempre tiene el nombre generic.default. Por ejemplo, print.default() (docs) imprimirá cualquier tipo de objeto que no tenga su propio método print() (docs).
Este ejercicio forma parte del curso
Programación orientada a objetos con S3 y R6 en R
Instrucciones del ejercicio
La función genérica get_n_elements() y un método para data.frame ya están definidos en tu espacio de trabajo.
- Usa
ls.str()(docs) para explorar tu espacio de trabajo. - Escribe un método S3 por defecto para
get_n_elements().- El nombre de la función debe ser el del genérico, luego un
.y despuésdefault. - Los argumentos de entrada deben ser
xy.... - El cuerpo de la función debe ser una sola línea que devuelva el número de elementos de un objeto arbitrario. Usa la misma técnica que en el ejercicio Make it Classy (1).
- El nombre de la función debe ser el del genérico, luego un
- Llama a tu método sobre el conjunto de datos
ability.cov(docs) y asigna el resultado a la variablen_elements_ability.cov.
ejercicio interactivo práctico
Prueba este ejercicio completando este código de ejemplo.
# View predefined objects
___
# Create a default method for get_n_elements
___ <- ___
# Call the method on the ability.cov dataset
n_elements_ability.cov <- ___