Que révèle un nom ?
S3 repose sur une convention d'appellation stricte : toutes les méthodes S3 portent un nom de la forme generic.class.
L'inverse n'est pas vrai : une fonction peut avoir un nom contenant un point sans être une méthode S3. C'est le cas de nombreuses fonctions présentes depuis les débuts du langage S. Par exemple, all.equal() (docs) est en fait un générique S3, pas une méthode. (C'est un exemple montrant à quel point la notation leopard.case peut porter à confusion.)
Vous pouvez vérifier si une fonction est un générique S3 en appelant is_s3_generic() (docs) du paquet pryr. Vous pouvez aussi l'imprimer (en tapant son nom dans la console) et vérifier si elle appelle UseMethod().
De même, vous pouvez vérifier si une fonction est une méthode S3 en appelant is_s3_method() (docs) de pryr. Par exemple,
library(pryr)
is_s3_generic("t") # fonction générique de transposition
is_s3_method("t.data.frame") # méthode de transposition pour les data.frames
is_s3_method("t.test") # fonction pour les tests t de Student
Quelles affirmations sont vraies ?
is.complex()(docs) est une méthode du génériqueisqui agit sur les objetscomplex.seq.Date()(docs) est une méthode du génériqueseqqui agit sur les objetsDate.is.na.data.frame()(docs) est une méthode du génériqueis.naqui agit sur les objetsdata.frame.sort()(docs) est une fonction générique.order()(docs) est une fonction générique.
Cette activité fait partie du cours
Programmation orientée objet avec S3 et R6 en R
Exercice interactif pratique
Passez de la théorie à l’action grâce à l’un de nos exercices interactifs
Commencer l’exercice