我正试图在R中使用s3类系统。
文档说我需要为我想要创建的方法创建一个通用函数。
假设我想为类 XYZ 创建方法 foo 。
使用R所有的软件包,我怎样才能确定我没有覆盖以前创建的通用方法?
摘要是一个不好的例子,因为每个人都可能知道它已经存在,但是我的泛型已经有可能已经在我已经加载的包或者我将加载的包中定义了。
答案 0 :(得分:0)
我遇到过类似的问题,我想在此发布部分解决方案,并从中吸取一些教训。
summary
中分发lavaan
s4方法时失败,并且semTool
包)。methods("foo")
或所有方法来检查可用的方法
methods(class="XYZ")
上课。isGeneric("foo")
。如果方法尚未注册,那么我们需要设置一个泛型使用(summary
并非如此):
foo<- function(x) UseMethod("foo")
第一个问题是:
有getS3method(f="foo",class="XYZ")
选项,但同时需要函数和类;
utils::getAnywere("foo")
范围更广,而且仅适用于已加载的软件包...
如果仅存在S3方法(不存在S4方法),并且我们没有指定泛型,而是新方法,并且可以确定类名尚未使用,则这并不是真正的问题。
第二个问题是:
summary
的情况下已经具有一个已经存在的泛型)将其发送给S4方法。(i)因此,我们还可以在加载后专门跟踪S3方法.S3methods("foo")
或特定类.S3methods(class="XYZ")
的s3方法,并在加载后专门找出S4方法(例如,使用.S4methods("foo")
)我担心的所有主要包裹...;
(ii)标识对象类别;
(iii)检查其文档中是否存在任何相应的方法(显然,某些s4方法在文档中不太容易识别,因此很容易在s3方法内部调用)
(iv)如果(iii)不可用,请评估其结构;和
(v)通过调用已识别的方法(如果可用)或从对象中提取所需的输出(考虑其结构)来为特定类指定相应的s3方法。
(使用.default是替代方法,但我认为需要仔细考虑)。
但是尽管对于summary
方法而言,考虑类对象结构来重新指定方法的方法有些容易,但是对于其他功能而言,这可能是一项艰巨的工作...
我想应该有一个广泛的解决方案来自动考虑s4方法,但是我对S4方法的有限了解暂时无法在其中发展……