ÎncepețiÎncepe gratuit

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?

  1. is.complex() (docs) este o metodă a genericului is care acționează asupra obiectelor de tip complex.
  2. seq.Date() (docs) este o metodă a genericului seq care acționează asupra obiectelor de tip Date.
  3. is.na.data.frame() (docs) este o metodă a genericului is.na care acționează asupra obiectelor de tip data.frame.
  4. sort() (docs) este o funcție generică.
  5. order() (docs) este o funcție generică.

Acest exercițiu face parte din cursul

Programare orientată pe obiecte cu S3 și R6 în R

Vezi cursul

Exercițiu interactiv practic

Transformă teoria în practică cu unul dintre exercițiile noastre interactive

Începe exercițiul