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


R S4groupGeneric S4組通用函數


R語言 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

roundsignif 中使用的位數。

...

傳入或傳出方法的更多參數。

na.rm

邏輯:缺失值應該被刪除嗎?

細節

可以通過以通常的方式調用setMethod 來為組通用函數定義方法。請注意,永遠不要直接調用組通用函數 - 如果直接調用,將會產生一條合適的錯誤消息。當加載組泛型的元數據時,定義的方法將成為組成員的方法,但前提是沒有直接為同一簽名的成員函數指定方法。其效果是在繼承的方法之前但在直接指定的方法之後選擇組通用定義。有關方法選擇的更多信息,請參閱Methods_Details

還有S3組Math,Ops,SummaryComplex, 看?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 組的兩個成員 logtrunc 將 ... 作為額外的正式參數。由於 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-devel大神的英文原創作品 S4 Group Generic Functions。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。