CommencerCommencer gratuitement

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 ?

  1. is.complex() (docs) est une méthode du générique is qui agit sur les objets complex.
  2. seq.Date() (docs) est une méthode du générique seq qui agit sur les objets Date.
  3. is.na.data.frame() (docs) est une méthode du générique is.na qui agit sur les objets data.frame.
  4. sort() (docs) est une fonction générique.
  5. order() (docs) est une fonction générique.

Cet exercice fait partie du cours

Programmation orientée objet avec S3 et R6 en R

Afficher le cours

Exercice interactif pratique

Passez de la théorie à la pratique avec l’un de nos exercices interactifs

Commencer l’exercice