Qu’y a-t-il dans un nom ?
S3 utilise une convention de nommage stricte : toutes les méthodes S3 ont un nom de la forme generic.class.
La réciproque est fausse : une fonction peut contenir un point dans son nom 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 réalité un générique S3, et non une méthode. (C’est un exemple de la façon dont la notation leopard.case peut prêter à confusion.)
Vous pouvez vérifier si une fonction est un générique S3 en appelant is_s3_generic() (docs) du package pryr. Vous pouvez aussi l’imprimer (en tapant son nom dans la console), puis 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) depuis 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") # une 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.
Cet exercice fait partie du cours
Programmation orientée objet avec S3 et R6 en R
Exercice interactif pratique
Passez de la théorie à la pratique avec l’un de nos exercices interactifs
Commencer l’exercice