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