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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。
