S4groupGeneric
位於 methods
包(package)。 說明
可以為組通用函數定義方法。每個組通用函數都有多個與其關聯的成員通用函數。
為組通用函數定義的方法會導致為組的每個成員定義相同的方法,但為組的成員顯式定義的方法優先於為組通用函數定義的具有相同簽名的方法。
本文檔頁麵中顯示的函數全部駐留在methods
包中,但任何程序員都可以通過調用setGroupGeneric
(提供附加的包methods
)來使用該機製。
用法
## S4 group generics:
Arith(e1, e2)
Compare(e1, e2)
Ops(e1, e2)
Logic(e1, e2)
Math(x)
Math2(x, digits)
Summary(x, ..., na.rm = FALSE)
Complex(z)
參數
x, z, e1, e2 |
對象。 |
digits |
|
... |
傳入或傳出方法的更多參數。 |
na.rm |
邏輯:缺失值應該被刪除嗎? |
細節
可以通過以通常的方式調用setMethod
來為組通用函數定義方法。請注意,永遠不要直接調用組通用函數 - 如果直接調用,將會產生一條合適的錯誤消息。當加載組泛型的元數據時,定義的方法將成為組成員的方法,但前提是沒有直接為同一簽名的成員函數指定方法。其效果是在繼承的方法之前但在直接指定的方法之後選擇組通用定義。有關方法選擇的更多信息,請參閱Methods_Details
。
還有S3組Math
,Ops
,Summary
和Complex
, 看?S3groupGeneric
,沒有對應的R對象,但這些與 S4 組通用函數無關。
特定泛型定義的組成員可以通過調用 getGroupMembers
來獲取。對於當前在此包中定義的組通用函數,其成員如下:
Arith
-
"+"
,"-"
,"*"
,"^"
,"%%"
,"%/%"
,"/"
Compare
-
"=="
,">"
,"<"
,"!="
,"<="
,">="
Logic
-
"&"
、"|"
。 Ops
-
"Arith"
,"Compare"
,"Logic"
Math
-
"abs"
,"sign"
,"sqrt"
,"ceiling"
,"floor"
,"trunc"
,"cummax"
,"cummin"
,"cumprod"
,"cumsum"
,"log"
,"log10"
,"log2"
,"log1p"
,"acos"
,"acosh"
,"asin"
,"asinh"
,"atan"
,"atanh"
,"exp"
,"expm1"
,"cos"
,"cosh"
,"cospi"
,"sin"
,"sinh"
,"sinpi"
,"tan"
,"tanh"
,"tanpi"
,"gamma"
,"lgamma"
,"digamma"
,"trigamma"
Math2
-
"round"
,"signif"
Summary
-
"max"
,"min"
,"range"
,"prod"
,"sum"
,"any"
,"all"
Complex
-
"Arg"
,"Conj"
,"Im"
,"Mod"
,"Re"
請注意,Ops
僅由三個子組組成。
這些組中的所有函數(除了組泛型本身)都是基本函數R。默認情況下,它們不是 S4 通用函數,並且其中許多被定義為原語。但是,您仍然可以單獨或通過組泛型為它們定義形式方法。這一切或多或少都如你所期望的那樣,誠然是通過一些後台的欺騙手段實現的。看Methods_Details詳情。
請注意,Math
組的兩個成員 log
和 trunc
將 ... 作為額外的正式參數。由於 Math
的方法隻有一個形式參數,因此您必須為這些函數設置一種特定方法,以便使用額外的參數調用它們。
有關組通用函數的更多詳細信息,請參閱第二個參考文獻的第 10.5 節。
例子
setClass("testComplex", slots = c(zz = "complex"))
## method for whole group "Complex"
setMethod("Complex", "testComplex",
function(z) c("groupMethod", callGeneric(z@zz)))
## exception for Arg() :
setMethod("Arg", "testComplex",
function(z) c("ArgMethod", Arg(z@zz)))
z1 <- 1+2i
z2 <- new("testComplex", zz = z1)
stopifnot(identical(Mod(z2), c("groupMethod", Mod(z1))))
stopifnot(identical(Arg(z2), c("ArgMethod", Arg(z1))))
參考
Chambers, John M. (2016) Extending R, Chapman & Hall. (Chapters 9 and 10.)
Chambers, John M. (2008) Software for Data Analysis: Programming with R Springer. (Section 10.5)
也可以看看
在為組泛型編寫方法時,函數 callGeneric
幾乎總是相關的。請參閱下麵的示例以及數據分析軟件第 10.5 節中的示例。
有關 S3 組泛型,請參閱S3groupGeneric。
相關用法
- R StructureClasses 基本結構對應的類
- R S3Part 包含 S3 類的 S4 類
- R as 強製對象屬於某個類
- R language-class 表示未評估語言對象的類
- R className 類名包含對應的包
- R BasicClasses 基本數據類型對應的類
- R callGeneric 從方法調用當前通用函數
- R findClass 查找類定義
- R setOldClass 注冊舊式 (S3) 類和繼承
- R ReferenceClasses 具有按引用處理的字段的對象(OOP 樣式)
- R MethodsList 方法列表對象
- R setGroupGeneric 創建函數的組通用版本
- R showMethods 顯示指定函數或類的所有方法
- R getMethod 獲取或測試方法的定義
- R slot 正式類對象中的槽
- R methodUtilities 用於方法和 S-Plus 兼容性的實用函數
- R getClass 獲取類定義
- R evalSource 使用源文件中的函數定義,無需重新安裝包
- R is 對象是來自類嗎?
- R isSealedMethod 檢查密封方法或類
- R cbind2 按列或行組合兩個對象
- R GenericFunctions 管理通用函數的工具
- R dotsMethods 在方法簽名中使用...
- R nonStructure-class 基本類型的非結構 S4 類
- R selectSuperClasses 類的超類(特定類型)
注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 S4 Group Generic Functions。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。