CommencezCommencez gratuitement

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 ?

  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.

Cette activité fait partie du cours

Programmation orientée objet avec S3 et R6 en R

Voir le cours

Exercice interactif pratique

Passez de la théorie à l’action grâce à l’un de nos exercices interactifs

Commencer l’exercice