Я работаю над коллекцией скриптов и использую классы и методы s3, чтобы все было немного чище.
Структура класса состоит из трех уровней.
- Уровень 1: data.frame
- Уровень 2: sample_report ИЛИ fix_report
- Уровень 3: стим_репорт
Я хочу написать функцию, которая ТОЛЬКО принимает фреймы данных классаtim_report, а затем отправляет другой метод в зависимости от того, наследуется ли стим_репорт от sample_report или наследуется от fix_report.
Очевидно, я мог бы сделать что-то вроде
myfunction.stim_report(df)
if ("sample_report" %in% class(df)) {
% do something
} else if ("fix_report" %in% class(df)) {
% do something
}
Но это поражает цель диспетчеризации методов.
Обратите внимание, что мне нужно, чтобы все работало, чтобы функция возвращала ошибку, если класс фрейма данных не являетсяtim_report. Так что, полагаю, я мог бы также:
myfunction.fix_report(df)
if ("stim_report" %in% class(df)) {
% do something
} else {
stop("No method found")
}
myfunction.sample_report(df)
if ("stim_report" %in% class(df)) {
% do something
} else {
stop("No method found")
}
Но опять же, похоже, что это идет вразрез со всей сутью методов S3.
Есть ли правильный способ сделать это?