EmpezarEmpieza gratis

¿Qué hay en un nombre?

S3 usa una convención de nombres estricta: todos los métodos S3 tienen un nombre de la forma generic.class.

La inversa no es cierta: una función puede tener un nombre con un punto sin ser un método S3. Esto ocurre con muchas funciones que existen desde los inicios del lenguaje S. Por ejemplo, all.equal() (docs) es en realidad un genérico S3, no un método. (Este es un ejemplo de cómo leopard.case puede resultar confuso.)

Puedes comprobar si una función es un genérico S3 llamando a is_s3_generic() (docs) del paquete pryr. También puedes imprimirla (escribiendo su nombre en la consola) y comprobar si llama a UseMethod().

De forma similar, puedes comprobar si una función es un método S3 llamando a is_s3_method() (docs) de pryr. Por ejemplo,

library(pryr)
is_s3_generic("t")           # función genérica de transposición
is_s3_method("t.data.frame") # método de transposición para data.frames
is_s3_method("t.test")       # una función para pruebas t de Student 

¿Cuáles de las siguientes afirmaciones son verdaderas?

  1. is.complex() (docs) es un método del genérico is que actúa sobre objetos complex.
  2. seq.Date() (docs) es un método del genérico seq que actúa sobre objetos Date.
  3. is.na.data.frame() (docs) es un método del genérico is.na que actúa sobre objetos data.frame.
  4. sort() (docs) es una función genérica.
  5. order() (docs) es una función genérica.

Este ejercicio forma parte del curso

Programación orientada a objetos con S3 y R6 en R

Ver curso

ejercicio interactivo práctico

Convierte la teoría en práctica con uno de nuestros ejercicios interactivos

Empezar ejercicio