Co kryje się w nazwie?
S3 stosuje ścisłą konwencję nazewnictwa: wszystkie metody S3 mają nazwy w postaci generic.class.
Odwrotna zależność nie jest jednak prawdziwa: funkcja może mieć w nazwie kropkę, nie będąc przy tym metodą S3. Dotyczy to wielu funkcji istniejących od wczesnych dni języka S. Na przykład all.equal() (docs) jest w rzeczywistości generykiem S3, a nie metodą. (To dobry przykład tego, jak konwencja leopard.case może wprowadzać zamieszanie.)
Możesz sprawdzić, czy dana funkcja jest generykiem S3, wywołując is_s3_generic() (docs) z pakietu pryr. Możesz też wypisać jej treść (wpisując nazwę w konsoli) i sprawdzić, czy zawiera wywołanie UseMethod().
Podobnie możesz sprawdzić, czy funkcja jest metodą S3, korzystając z is_s3_method() (docs) z pakietu pryr. Na przykład:
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
Które stwierdzenia są prawdziwe?
is.complex()(docs) jest metodą generykaisdziałającą na obiektachcomplex.seq.Date()(docs) jest metodą generykaseqdziałającą na obiektachDate.is.na.data.frame()(docs) jest metodą generykais.nadziałającą na obiektachdata.frame.sort()(docs) jest funkcją generyczną.order()(docs) jest funkcją generyczną.
To ćwiczenie jest częścią kursu
Programowanie obiektowe z S3 i R6 w R
Interaktywne ćwiczenie praktyczne
Przekształć teorię w praktykę dzięki jednemu z naszych interaktywnych ćwiczeń
Rozpocznij ćwiczenie