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 |
|
... |
传入或传出方法的更多参数。 |
na.rm |
逻辑:缺失值应该被删除吗? |
细节
可以通过以通常的方式调用setMethod
来为组通用函数定义方法。请注意,永远不要直接调用组通用函数 - 如果直接调用,将会产生一条合适的错误消息。当加载组泛型的元数据时,定义的方法将成为组成员的方法,但前提是没有直接为同一签名的成员函数指定方法。其效果是在继承的方法之前但在直接指定的方法之后选择组通用定义。有关方法选择的更多信息,请参阅Methods_Details
。
还有S3组Math
,Ops
,Summary
和Complex
, 看?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
组的两个成员 log
和 trunc
将 ... 作为额外的正式参数。由于 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 StructureClasses 基本结构对应的类
- R S3Part 包含 S3 类的 S4 类
- R as 强制对象属于某个类
- R language-class 表示未评估语言对象的类
- R className 类名包含对应的包
- R BasicClasses 基本数据类型对应的类
- R callGeneric 从方法调用当前通用函数
- R findClass 查找类定义
- R setOldClass 注册旧式 (S3) 类和继承
- R ReferenceClasses 具有按引用处理的字段的对象(OOP 样式)
- R MethodsList 方法列表对象
- R setGroupGeneric 创建函数的组通用版本
- R showMethods 显示指定函数或类的所有方法
- R getMethod 获取或测试方法的定义
- R slot 正式类对象中的槽
- R methodUtilities 用于方法和 S-Plus 兼容性的实用函数
- R getClass 获取类定义
- R evalSource 使用源文件中的函数定义,无需重新安装包
- R is 对象是来自类吗?
- R isSealedMethod 检查密封方法或类
- R cbind2 按列或行组合两个对象
- R GenericFunctions 管理通用函数的工具
- R dotsMethods 在方法签名中使用...
- R nonStructure-class 基本类型的非结构 S4 类
- R selectSuperClasses 类的超类(特定类型)
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 S4 Group Generic Functions。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。