Ce se ascunde în spatele unui nume?
S3 folosește o convenție strictă de denumire: toate metodele S3 au un nume de forma generic.clasa.
Reciproca nu este adevărată: o funcție poate avea un nume cu punct fără a fi o metodă S3. Acesta este cazul multor funcții care există încă din primele versiuni ale limbajului S. De exemplu, all.equal() (docs) este de fapt un generic S3, nu o metodă. (Acesta este un exemplu al modului în care leopard.case poate crea confuzie.)
Poți verifica dacă o funcție este un generic S3 apelând is_s3_generic() (docs) din pachetul pryr. O altă opțiune este să o afișezi în consolă (scriindu-i numele), și apoi să verifici dacă apelează UseMethod().
Similar, poți verifica dacă o funcție este o metodă S3 apelând is_s3_method() (docs) din pryr. De exemplu,
library(pryr)
is_s3_generic("t") # generic transpose function
is_s3_method("t.data.frame") # transpose method for data.frames
is_s3_method("t.test") # a function for Student's t-tests
Care dintre afirmațiile de mai jos sunt adevărate?
is.complex()(docs) este o metodă a genericuluiiscare acționează asupra obiectelor de tipcomplex.seq.Date()(docs) este o metodă a genericuluiseqcare acționează asupra obiectelor de tipDate.is.na.data.frame()(docs) este o metodă a genericuluiis.nacare acționează asupra obiectelor de tipdata.frame.sort()(docs) este o funcție generică.order()(docs) este o funcție generică.
Acest exercițiu face parte din cursul
Programare orientată pe obiecte cu S3 și R6 în R
Exercițiu interactiv practic
Transformă teoria în practică cu unul dintre exercițiile noastre interactive
Începe exercițiul