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

Хенрик Бенгтссон (Henrik Bengtsson) предоставил Интернету хороший способ создания обобщений S3 в R, не беспокоясь о том, были ли они уже созданы до... в 2002 году.

То, что его функция setGenericsS3 делает, в основном:

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

если так,

  • проверьте, является ли это универсальным
  • если это не так, переименуйте его в.default и создайте общий

если нет, просто создайте общий.

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

РЕДАКТИРОВАТЬ: Я специально ищу S3. Функция isGeneric() работает только для S4, например, для anova (который является общим S3):

> isGeneric('anova')
[1] FALSE
> anova
function (object, ...) 
UseMethod("anova")
<bytecode: 0x04dc7a18>
<environment: namespace:stats>

1 ответ

Ты можешь использовать isGenericS3 функция R.methodsS3 пакет. Пожалуйста, смотрите код ниже:

library(R.methodsS3)
isGenericS3(anova)
# [1] TRUE
Другие вопросы по тегам