Comece agoraComece grátis

O que há em um nome?

S3 usa uma convenção de nomenclatura rígida: todos os métodos S3 têm um nome no formato generic.class.

A recíproca não é verdadeira: uma função pode ter um nome com ponto sem ser um método S3. É o caso de muitas funções que existem desde os primeiros dias da linguagem S. Por exemplo, all.equal() (docs) é, na verdade, um genérico S3, não um método. (Esse é um exemplo de como leopard.case pode ser confuso.)

Você pode verificar se uma função é um genérico S3 chamando is_s3_generic() (docs) do pacote pryr. Você também pode imprimí-la (digitando seu nome no console) e então verificar se ela chama UseMethod().

Da mesma forma, você pode verificar se uma função é um método S3 chamando is_s3_method() (docs) do pryr. Por exemplo,

library(pryr)
is_s3_generic("t")           # função genérica de transposição
is_s3_method("t.data.frame") # método de transposição para data.frames
is_s3_method("t.test")       # uma função para testes t de Student 

Quais afirmações são verdadeiras?

  1. is.complex() (docs) é um método do genérico is que atua em objetos complex.
  2. seq.Date() (docs) é um método do genérico seq que atua em objetos Date.
  3. is.na.data.frame() (docs) é um método do genérico is.na que atua em objetos data.frame.
  4. sort() (docs) é uma função genérica.
  5. order() (docs) é uma função genérica.

Este exercicio faz parte do curso

Programação Orientada a Objetos com S3 e R6 em R

Ver curso

exercicio interativo prático

Transforme teoria em prática com um dos nossos exercicio interativos

Iniciar exercicio