【发布时间】:2014-08-21 14:01:12
【问题描述】:
我正在尝试了解 R 中的 s3 类系统。
文档说我需要为我想要创建的方法创建一个通用函数。
假设我想为类 XYZ 创建一个方法 foo。
使用 R 拥有的所有包,我如何确定我没有覆盖以前创建的泛型方法?
Summary 是一个不好的例子,因为每个人都可能知道它已经存在,但我的泛型可能已经定义在我已经加载或我将加载的包中。
【问题讨论】:
-
问题不在于方法,而在于类。如果你的类与其他包不同,剩下的就变得微不足道了。
-
主要问题不是覆盖泛型(虽然这可以result in problems too),而是屏蔽非泛型,例如
dplyr::filter(泛型)掩蔽stats::filter(非泛型) )。关于从其他包中屏蔽 methods,这通常可以避免,因为不难找到可能是唯一的类名(例如,如果不是lme4 位作者)。 -
让我们以通用摘要为例,并假设我不知道 R 摘要中的某处已被定义为通用。如果我创建 summary
-
您可以通过添加指向原始函数的默认方法将函数重新定义为泛型而不破坏原始函数。请参阅此处的要点gist.github.com/datalove/88f5a24758b2d8356e32
-
@RomanLuštrik 仅当您的包裹未附加时才会如此。一旦你附加了你的包,你的泛型可能会覆盖其他现有的函数(反之亦然)。这绝对是 R 的包系统的一大缺陷。