Що в імені?
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-тестів Стьюдента
Які твердження є правильними?
is.complex()(docs) — це метод узагальненняis, що працює з об'єктамиcomplex.seq.Date()(docs) — це метод узагальненняseq, що працює з об'єктамиDate.is.na.data.frame()(docs) — це метод узагальненняis.na, що працює з об'єктамиdata.frame.sort()(docs) — це узагальнювальна функція.order()(docs) — це узагальнювальна функція.
Ця вправа є частиною курсу
Об'єктно-орієнтоване програмування з S3 та R6 в R
Практична інтерактивна вправа
Перетворіть теорію на практику за допомогою однієї з наших інтерактивних вправ
Почати вправу