34

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>
4

1 回答 1

1

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

library(R.methodsS3)
isGenericS3(anova)
# [1] TRUE
于 2018-10-03T14:41:08.530 回答