在R中安全地创建S3 Generics

Jor*_*eys 33 generics r r-s3

Henrik Bengtsson为互联网提供了一种在R创建S3泛型的好方法,而不必担心它们是否在2002年之前创建过.

他的函数setGenericsS3的作用基本上是:

  • 检查名称是否正常
  • 检查是否存在具有该名称的功能

如果是这样,

  • 检查它是否是通用的
  • 如果不是,请将其重命名为.default并创建泛型

如果没有,只需创建通用.

事实证明,当您自己的软件包中没有可用的代码时,自动创建泛型非常有用.当我们走过这个R时代时,我想知道现在在R中实现相同的正确方法是什么.我isS3Generic()在R中找不到或类似的函数,Henrik Bengtsson的代码源自R 2.14中引入的强制命名空间.我记得我已经看到了实现同样目标的其他方法,但找不到它们.

编辑:我特意找S3.该功能isGeneric()仅适用于S4,例如anova(用于S3通用):

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

Art*_*tem 1

您可以使用isGenericS3R.methodsS3包的功能。请看下面的代码:

library(R.methodsS3)
isGenericS3(anova)
# [1] TRUE
Run Code Online (Sandbox Code Playgroud)