當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。