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