Безопасное создание S3 Generics в R - PullRequest
33 голосов
/ 12 декабря 2011

Хенрик Бенгтссон предоставил Интернету хороший способ создания 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 Ответ

1 голос
/ 03 октября 2018

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

library(R.methodsS3)
isGenericS3(anova)
# [1] TRUE
...