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


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