Henrik Bengtsson 为互联网提供了一种在 R 中创建 S3 泛型的好方法,而不必担心它们是否已经在 2002 年创建。
他的函数 setGenericsS3 的作用基本上是:
- 检查名称是否正确
- 检查是否存在具有该名称的函数
如果是这样,
- 检查它是否是通用的
- 如果不是,请将其重命名为 .default 并创建一个泛型
如果没有,只需创建泛型。
事实证明,当您自己的包中没有可用的泛型时,此代码对于自动创建泛型非常有用。当我们已经过了这个 R 时代时,我想知道现在在 R 中实现相同目标的正确方法是什么。我在 R 中找不到isS3Generic()
类似的函数,而且 Henrik Bengtsson 的代码早在 R 2.14 中引入的强制性命名空间之前就起源了。我记得我见过其他实现相同目标的方法,但找不到它们。
编辑:我专门寻找 S3。该功能isGeneric()
仅适用于 S4,例如anova
(这是 S3 通用的):
> isGeneric('anova')
[1] FALSE
> anova
function (object, ...)
UseMethod("anova")
<bytecode: 0x04dc7a18>
<environment: namespace:stats>