ПочатиПочніть безкоштовно

Що в імені?

S3 використовує чіткі правила іменування: усі методи S3 мають ім'я у форматі generic.class.

Обратне твердження не завжди вірне: функція може мати крапку в імені й при цьому не бути методом S3. Так сталося з багатьма функціями, що існують із перших днів мови S. Наприклад, all.equal() (docs) насправді є узагальненням S3, а не методом. (Це приклад того, як стиль leopard.case може збивати з пантелику.)

Ви можете перевірити, чи є функція узагальненням S3, викликом is_s3_generic() (docs) з пакета pryr. Також можна вивести її визначення (надрукувавши її ім'я в консолі) й подивитися, чи містить вона виклик UseMethod().

Аналогічно, ви можете перевірити, чи є функція методом S3, викликом is_s3_method() (docs) з pryr. Наприклад,

library(pryr)
is_s3_generic("t")           # узагальнювальна функція транспонування
ais_s3_method("t.data.frame") # метод транспонування для data.frame
ais_s3_method("t.test")       # функція для t-тестів Стьюдента 

Які твердження є правильними?

  1. is.complex() (docs) — це метод узагальнення is, що працює з об'єктами complex.
  2. seq.Date() (docs) — це метод узагальнення seq, що працює з об'єктами Date.
  3. is.na.data.frame() (docs) — це метод узагальнення is.na, що працює з об'єктами data.frame.
  4. sort() (docs) — це узагальнювальна функція.
  5. order() (docs) — це узагальнювальна функція.

Ця вправа є частиною курсу

Об'єктно-орієнтоване програмування з S3 та R6 в R

Переглянути курс

Практична інтерактивна вправа

Перетворіть теорію на практику за допомогою однієї з наших інтерактивних вправ

Почати вправу