Безопасное создание S3 Generics в R

Хенрик Бенгтссон предоставил интернету прекрасный способ создания S3-генериков в R без необходимости беспокоиться о том, были ли они уже созданы до... в 2002 году.

Его функция setGenericsS3 делает следующее:

  • проверяет, подходит ли имя
  • проверяет, существует ли функция с таким именем

если да,

  • проверяет, является ли она дженериком
  • если нет, переименовывает ее в .default и создает дженерик

если нет, просто создает дженерик.

Этот код оказался очень полезным для автоматического создания дженериков, когда в ваших собственных пакетах их не было. Поскольку мы уже прошли эту эру R, мне стало интересно, как правильно сделать то же самое в R сейчас. Я не могу найти isS3Generic() или подобную функцию в R, а код Хенрика Бенгтссона был написан задолго до введения обязательных пространств имен в R 2.14. Я помню, что видел другие способы добиться того же, но не могу их найти.

EDIT: Я специально ищу S3. Функция isGeneric() работает только для S4, например для anova (которая является S3 generic) :

> isGeneric('anova')
[1] FALSE
> anova
function (object, ...) 
UseMethod("anova")


33
задан shosaco 25 September 2018 в 15:57
поделиться