当前位置: 首页>>编程示例 >>用法及示例精选 >>正文


R testInheritedMethods 继承方法选择的测试和报告

R语言 testInheritedMethods 位于 methods 包(package)。

说明

生成一组不同的继承签名来测试指定通用函数的所有方法的继承。如果其中某些方法选择不明确,则会将不明确性的摘要附加到返回的对象中。此测试应由包作者在发布包之前执行。

用法

testInheritedMethods(f, signatures, test = TRUE, virtual = FALSE,
                     groupMethods = TRUE, where = .GlobalEnv)

参数

f

通用函数或其字符串名称。默认情况下,将检查该泛型的所有方法签名的所有当前定义的子类。其他参数主要是修改将检查哪些继承模式的选项。

signatures

一组可选的子类签名,用于代替 testInheritedMethods 计算的相关子类。请参阅详细信息了解如何完成此操作。可以在调用 test = FALSE 后提供此参数,以批量测试选择。

test

可选标志来控制是否实际测试方法选择。如果 FALSE ,则仅返回子类的相关签名列表,而不为每个签名调用 selectMethod。如果签名数量非常多,您可能需要收集完整列表,然后分批进行测试。

virtual

虚拟类是否应该包含在相关的子类中。通常不会,因为只有实际参数的类才会在调用泛型函数时触发继承计算。如果类当前没有非虚拟子类,但您预计用户将来可能会定义此类,则包含虚拟类可能会很有用。

groupMethods

是否应该包括组通用函数的方法?

where

查找类定义的环境。几乎总是在附加具有相关方法和/或类定义的所有包后使用默认的全局环境。

细节

以下说明适用于省略可选参数(通常情况)的情况。首先,所有方法的定义签名都是通过调用 findMethodSignatures 来计算的。从这些中可以找到出现在某个方法的签名中的每个类的所有已知非虚拟子类。这些子类根据它们继承的类分为几组,并且每组中仅保留一个子类(对于通用签名中的每个参数)。因此,如果使用类 "vector" 为某个参数定义了一个方法,则会任意选择一个实际的向量类。 "ANY" 的情况需要特殊处理,因为所有类都扩展了它。虚拟的非虚拟类 ".Other" 用于对应正在测试的所有没有超类的类。

然后计算通用签名中参数的保留子类的所有组合。生成的矩阵的每一行都是要通过调用 selectMethod 进行测试的签名。为了收集有关不明确选择的信息,testInheritedMethods 通过设置相应的选项,为特殊信号 "ambiguousMethodSelection" 建立一个调用处理程序。

"methodSelectionReport" 的对象。此类的详细信息当前可能会发生变化。它有槽 "target""selected""candidates""note" ,所有槽都指不明确的情况(如果没有,则长度为 0)。这些槽旨在由程序员检查,以检测并最好修复不明确的方法选择。该对象还包含槽"generic"(泛型函数的名称)和"allSelections"(给出所有测试签名的标签向量)。

例子

## if no other attached packages have methods for `+` or its group
## generic functions, this returns a 16 by 2 matrix of selection
## patterns (in R 2.9.0)
testInheritedMethods("+")

参考

Chambers, John M. (2008) Software for Data Analysis: Programming with R Springer. (Section 10.6 for basics of method selection.)

Chambers, John M. (2009) Class Inheritance in R https://statweb.stanford.edu/~jmc4/classInheritance.pdf.

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Test for and Report about Selection of Inherited Methods。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。