Безопасное создание 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