1. Nauka
  2. /
  3. Kursy
  4. /
  5. Programowanie obiektowe z S3 i R6 w R

Connected

ćwiczenie

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?

  1. is.complex() (docs) jest metodą generyka is działającą na obiektach complex.
  2. seq.Date() (docs) jest metodą generyka seq działającą na obiektach Date.
  3. is.na.data.frame() (docs) jest metodą generyka is.na działającą na obiektach data.frame.
  4. sort() (docs) jest funkcją generyczną.
  5. order() (docs) jest funkcją generyczną.

Instrukcje

50 XP

Możliwe odpowiedzi