Cosa c’è in un nome?
S3 usa una convenzione di denominazione rigorosa: tutti i metodi S3 hanno un nome della forma generic.class.
Il contrario però non è vero: una funzione può avere un nome con un punto senza essere un metodo S3. È il caso di molte funzioni presenti fin dai primi tempi del linguaggio S. Per esempio, all.equal() (docs) è in realtà una generica S3, non un metodo. (Questo è un esempio di come la notazione leopard.case possa creare confusione.)
Puoi verificare se una funzione è una generica S3 chiamando is_s3_generic() (docs) dal pacchetto pryr. Puoi anche stamparla (digitandone il nome in console) e vedere se chiama UseMethod().
In modo analogo, puoi verificare se una funzione è un metodo S3 chiamando is_s3_method() (docs) da pryr. Per esempio,
library(pryr)
is_s3_generic("t") # funzione generica per la trasposizione
is_s3_method("t.data.frame") # metodo di trasposizione per data.frame
is_s3_method("t.test") # una funzione per i test t di Student
Quali affermazioni sono vere?
is.complex()(docs) è un metodo della genericaische agisce su oggetticomplex.seq.Date()(docs) è un metodo della genericaseqche agisce su oggettiDate.is.na.data.frame()(docs) è un metodo della genericais.nache agisce su oggettidata.frame.sort()(docs) è una funzione generica.order()(docs) è una funzione generica.
Questo esercizio fa parte del corso
Programmazione orientata agli oggetti con S3 e R6 in R
esercizio interattivo pratico
Trasforma la teoria in pratica con uno dei nostri esercizi interattivi
Inizia esercizio