groupGeneric
位於 base
包(package)。 說明
可以為以下預先指定的函數組定義組通用方法,Math
,Ops
,matrixOps
,Summary
和Complex
。 (基礎中沒有這些名稱的對象R,但有在methods
包,還沒有matrixOps
.)
為組中的單個成員定義的方法優先於為整個組定義的方法。
用法
## S3 methods for group generics have prototypes:
Math(x, ...)
Ops(e1, e2)
Complex(z)
Summary(..., na.rm = FALSE)
matrixOps(x, y)
參數
x , y , z , e1 , e2 |
對象。 |
... |
進一步的參數傳遞給方法。 |
na.rm |
邏輯:缺失值應該被刪除嗎? |
細節
有五個團體可以為其編寫 S3 方法,即"Math"
,"Ops"
,"Summary"
,"matrixOps"
, 和"Complex"
組。這些不是R基礎中的物體R,但可以為它們提供方法和基礎R包含factor
,data.frame
和difftime
前三組的方法。 (還有一個ordered
方法用於Ops
,POSIXt
和Date
方法用於Math
和Ops
,package_version
方法用於Ops
和Summary
, 以及ASAts
方法用於Ops
包裝內stats
.)
-
組
"Math"
:-
abs
,sign
,sqrt
,
floor
,ceiling
,trunc
,
round
,signif
-
exp
,log
,expm1
,log1p
,
cos
,sin
,tan
,
cospi
,sinpi
,tanpi
,
acos
,asin
,atan
cosh
,sinh
,tanh
,
acosh
,asinh
,atanh
-
lgamma
,gamma
,digamma
,trigamma
-
cumsum
,cumprod
,cummax
,cummin
該小組的成員在
x
上調度。大多數成員僅接受一個參數,但成員log
、round
和signif
接受一兩個參數,而trunc
接受一個或多個參數。 -
-
組
"Ops"
:-
"+"
,"-"
,"*"
,"/"
,"^"
,"%%"
,"%/%"
-
"&"
,"|"
,"!"
-
"=="
,"!="
,"<"
,"<="
,">="
,">"
該組包含二元和一元運算符(
+
、-
和!
):當遇到一元運算符時,將使用一個參數調用Ops
方法,並且e2
會丟失。在調度該組的任何成員時都會考慮這兩個參數的類。對於每個參數,檢查其類向量以查看是否存在匹配的特定(首選)或
Ops
方法。如果僅為一個參數找到一種方法,或者為兩個參數找到相同的方法,則使用該方法。如果發現不同的方法,則調用通用chooseOpsMethod()
來選擇適當的方法。 (有關詳細信息,請參閱?chooseOpsMethod
)。如果chooseOpsMethod()
無法解析該方法,則會出現有關“不兼容方法”的警告:在這種情況下,或者如果任一參數都找不到方法,則使用內部方法。請注意,用於比較(
"Compare"
:==
、<
、 ...)和邏輯("Logic"
:&
|
和!
)運算符的data.frame
方法返回邏輯值matrix
而不是數據幀,以方便和向後兼容。如果該組的成員作為函數調用,則刪除任何參數名稱以確保始終使用位置匹配。
-
-
組
"matrixOps"
:-
"%*%"
該組當前僅包含矩陣乘法
%*%
二元運算符,其中至少應遵循crossprod()
和tcrossprod()
。該組的成員與Ops
組具有相同的調度語義(使用兩個參數)。 -
-
組
"Summary"
:-
all
,any
-
sum
,prod
-
min
,max
-
range
該組的成員根據提供的第一個參數進行調度。
請注意,
"Summary"
和"Math"
組的data.frame
方法需要 “numeric-alike” 列x
,即滿足is.numeric(x) || is.logical(x) || is.complex(x)
-
-
組
"Complex"
:-
Arg
,Conj
,Im
,Mod
,Re
該小組的成員在
z
上調度。 -
請注意,僅當方法對應於 "class"
屬性時,該方法才會用於這些組之一或其成員之一,因為內部代碼在 oldClass
上分派,而不是在 class
上分派。這是為了提高效率:必須在 Ops.integer
上進行調度會太慢。
在分派之前不會檢查為 "Math"
組泛型方法的原始成員提供的參數數量。
組通用函數的參數沒有惰性求值。
技術細節
這些函數都是原始函數和 internal generic 。
方法分派和變量(例如 .Generic
)的詳細信息在 UseMethod
的幫助中討論。有一些小的差異:
-
對於
Ops
組的運算符,對象.Method
是一個 length-two 字符向量,其元素分別是為左參數和右參數選擇的方法。 (如果未選擇任何方法,則相應的元素為""
。) -
對象
.Group
記錄用於調度的組(如果使用特定方法,則為""
)。
注意
包 methods
確實包含具有這些名稱的對象,它以令人困惑的類似(但不同)的方式重新使用了這些對象。請參閱該包的幫助。
例子
require(utils)
d.fr <- data.frame(x = 1:9, y = stats::rnorm(9))
class(1 + d.fr) == "data.frame" ##-- add to d.f. ...
methods("Math")
methods("Ops")
methods("Summary")
methods("Complex") # none in base R
參考
Appendix A, Classes and Methods of
Chambers, J. M. and Hastie, T. J. eds (1992)
Statistical Models in S.
Wadsworth & Brooks/Cole.
也可以看看
methods
用於非內部泛型函數的方法。
S4groupGeneric 用於 S4 方法的組泛型。
相關用法
- R grouping 分組排列
- R grep 模式匹配和替換
- R grepRaw 原始向量的模式匹配
- R getwd 獲取或設置工作目錄
- R getDLLRegisteredRoutines DLL 中 C/Fortran 例程的反射信息
- R gzcon 通過連接(解)壓縮 I/O
- R get 返回命名對象的值
- R gc 垃圾收集
- R gl 生成因子水平
- R getLoadedDLLs 獲取當前會話中加載的 DLL
- R gc.time 報告垃圾收集所花費的時間
- R gettext 翻譯短信
- R gctorture 酷刑垃圾收集者
- R getNativeSymbolInfo 獲取一個或多個本機 (C/Fortran) 符號的說明
- R file.path 構造文件路徑
- R vector 向量 - 創建、強製等
- R lapply 對列表或向量應用函數
- R dump R 對象的文本表示
- R Sys.getenv 獲取環境變量
- R rank 樣本排名
- R pushBack 將文本推回連接
- R strsplit 分割字符向量的元素
- R seq.Date 生成規則的日期序列
- R invisible 將打印模式更改為不可見
- R noquote “無引號”字符串打印類
注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 S3 Group Generic Functions。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。