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


R findMethods 为通用函数定义的方法的说明


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

说明

函数 findMethods 将通用函数表中定义的方法(用于选择方法)转换为列表,以供研究或显示。该列表实际上来自类listOfMethods(请参阅下面说明该类的部分)。

如果提供了该参数,则该列表将仅限于环境 where 中定义的方法;如果提供了该参数,则该列表将仅限于方法签名中包含一个或多个指定的 classes 的方法。

要查看用于方法分派的实际表(environment),请调用getMethodsForDispatchfindMethods返回的列表的名称是表中对象的名称。

函数findMethodSignatures返回一个字符矩阵,其行是相应方法签名中的类名;它可以从 findMethods 返回的列表进行操作,也可以通过计算这样的列表本身来进行操作,并给出与 findMethods 相同的参数。

函数hasMethods根据环境中是否存在函数f的非空方法表或搜索位置where返回TRUEFALSE(或者对于泛型函数,通常如果where不见了)。

失效函数 getMethodsfindMethods 的较旧替代品,以类 MethodsList 对象的形式返回信息,以前用于方法分派。此类对象通常已被弃用,并将在 R 的未来版本中消失。

用法

findMethods(f, where, classes = character(), inherited = FALSE,
      package = "")

findMethodSignatures(..., target = TRUE, methods = )

hasMethods(f, where, package)

## Deprecated in 2010 and defunct in 2015 for 'table = FALSE':
getMethods(f, where, table = FALSE)

参数

f

通用函数或函数的字符串名称。

where

(可选)搜索列表中用于查找方法元数据的环境或位置。

如果 where 缺失,findMethods 将使用通用函数本身中的当前方法表,而 hasMethods 将在搜索列表中的任意位置查找元数据。

table

如果 TRUE 调用 getMethods,则返回值是用于调度的表,包括迄今为止发现的继承方法。内部使用,但由于默认结果是现在未使用的 mlist 对象,因此默认值可能会在某个时候更改。

classes

如果提供,则只有其签名至少包含所提供的类之一的方法才会包含在返回的值中。

inherited

逻辑标志;如果是 TRUE ,则将使用所有继承或直接定义的方法的表;否则,仅显式定义的方法。仅当缺少where 时,选项TRUE 才有意义。

...

在对 findMethodSignatures 的调用中,可能提供给 findMethods 的任何参数。

target

findMethodSignatures 的可选标志;如果 TRUE ,则使用的签名是目标签名(将为其选择方法的类);如果是 FALSE ,它们将被定义为签名。仅当 inheritedTRUE 时,差异才有意义。

methods

在对 findMethodSignatures 的调用中,可选方法列表,可能是由之前对 findMethods 的调用返回的。如果丢失,该函数将使用 ... 参数调用。

package

在对 hasMethods 的调用中,通用函数的包名称(例如,原语的 "base")。如果缺少此项,将从函数名称的 "package" 属性(如果有)或从通用函数的包槽中推断。查看具体信息'。

细节

这些函数从通用函数或从 where 指定的环境中存储的元数据对象获取已定义方法的表。在对 getMethods 的调用中,表中的信息将按上述方式进行转换以生成返回值,但 table 参数除外。

请注意,即使当前未找到该名称的通用函数,也可以使用 hasMethods ,但不能使用其他函数。在这种情况下,package 必须作为参数提供,或者作为 f 的属性包含在内,因为包名称是方法表标识的一部分。

方法列表的类

"listOfMethods" 以方法定义的命名列表形式返回方法(或原始函数,请参阅下面的槽文档)。名称是用于存储计算方法调度的环境中相应对象的字符串。当前的实现使用方法签名中相应类的名称,如果签名中涉及多个参数,则以 "#" 分隔。

插槽

.Data

"list" 的对象方法定义。

请注意,当泛型对应于基元时,这些可能包括基元函数本身作为默认方法。 (本质上,因为原始函数是异常的 R 对象,目前无法将其扩展为方法定义。)使用返回列表导出其他信息的计算需要考虑这种可能性。有关示例,请参阅findMethodSignatures 的实现。

arguments

"character" 的对象。通用函数签名中形式参数的名称。

signatures

"list" 的对象。各个方法的签名列表。这是当前根据"#"分隔符拆分names的结果。

如果对象是从表构造的,如 findMethods 返回时,签名将具有相同的长度。然而,出于通用性,使用列表而不是字符矩阵。如下例所示调用 findMethodSignatures 将始终转换为矩阵形式。

generic

"genericFunction" 的对象。这些方法对应的通用函数。计划推广此插槽以允许引用该函数。

names

"character" 的对象。所注明的名称是由 "#" 分隔的类名称。

扩展

直接类 "namedList"

"list" ,按类 "namedList" ,距离 2。

"vector" ,按类 "namedList" ,距离 3。

例子

mm <-  findMethods("Ops")
findMethodSignatures(methods = mm)

也可以看看

showMethodsselectMethodMethods_Details

相关用法


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