| groupGeneric {base} | R Documentation |
S3 Group Generic Functions
Description
Group generic methods can be defined for the following pre-specified groups of
functions, Math, Ops, matrixOps, Summary and Complex.
(There are no objects of these names in base R, but there are in the
methods package.)
A method defined for an individual member of the group takes precedence over a method defined for the group as a whole.
Usage
## S3 methods for group generics have prototypes:
Math(x, ...)
Ops(e1, e2)
Complex(z)
Summary(..., na.rm = FALSE)
matrixOps(x, y)
Arguments
x, y, z, e1, e2 |
objects. |
... |
further arguments passed to methods. |
na.rm |
logical: should missing values be removed? |
Details
There are five groups for which S3 methods can be written,
namely the "Math", "Ops", "Summary", "matrixOps", and
"Complex" groups. These are not R objects in base R, but
methods can be supplied for them and base R contains
factor, data.frame and
difftime methods for the first three groups. (There is
also a ordered method for Ops,
POSIXt and Date methods for Math
and Ops, package_version methods for Ops
and Summary, as well as a ts method for
Ops in package stats.)
Group
"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
Members of this group dispatch on
x. Most members accept only one argument, but memberslog,roundandsignifaccept one or two arguments, andtruncaccepts one or more.-
Group
"Ops":-
"+","-","*","/","^","%%","%/%" -
"&","|","!" -
"==","!=","<","<=",">=",">"
This group contains both binary and unary operators (
+,-and!): when a unary operator is encountered theOpsmethod is called with one argument ande2is missing.The classes of both arguments are considered in dispatching any member of this group. For each argument its vector of classes is examined to see if there is a matching specific (preferred) or
Opsmethod. If a method is found for just one argument or the same method is found for both, it is used. If different methods are found, then the genericchooseOpsMethod()is called to pick the appropriate method. (See?chooseOpsMethodfor details). IfchooseOpsMethod()does not resolve the method, then there is a warning about ‘incompatible methods’: in that case or if no method is found for either argument the internal method is used.Note that the
data.framemethods for the comparison ("Compare":==,<, ...) and logic ("Logic":&|and!) operators return a logicalmatrixinstead of a data frame, for convenience and back compatibility.If the members of this group are called as functions, any argument names are removed to ensure that positional matching is always used.
-
Group
"matrixOps":-
"%*%"
This group currently contains the matrix multiply
%*%binary operator only, where at leastcrossprod()andtcrossprod()are meant to follow. Members of the group have the same dispatch semantics (using both arguments) as theOpsgroup.-
Group
"Summary":-
all,any -
sum,prod -
min,max -
range
Members of this group dispatch on the first argument supplied.
Note that the
data.framemethods for the"Summary"and"Math"groups require “numeric-alike” columnsx, i.e., fulfillingis.numeric(x) || is.logical(x) || is.complex(x)-
Group
"Complex":-
Arg,Conj,Im,Mod,Re
Members of this group dispatch on
z.-
Note that a method will be used for one of these groups or one of its
members only if it corresponds to a "class" attribute,
as the internal code dispatches on oldClass and not on
class. This is for efficiency: having to dispatch on,
say, Ops.integer would be too slow.
The number of arguments supplied for primitive members of the
"Math" group generic methods is not checked prior to dispatch.
There is no lazy evaluation of arguments for group-generic functions.
Technical Details
These functions are all primitive and internal generic.
The details of method dispatch and variables such as .Generic
are discussed in the help for UseMethod. There are a
few small differences:
For the operators of group
Ops, the object.Methodis a length-two character vector with elements the methods selected for the left and right arguments respectively. (If no method was selected, the corresponding element is"".)Object
.Grouprecords the group used for dispatch (if a specific method is used this is"").
Note
Package methods does contain objects with these names, which it has re-used in confusing similar (but different) ways. See the help for that package.
References
Chambers JM (1992). “Classes and Methods: Object-Oriented Programming in S.” In Chambers JM, Hastie TJ (eds.), Statistical Models in S. Wadsworth & Brooks/Cole. Appendix A.
See Also
methods for methods of non-internal generic functions.
S4groupGeneric for group generics for S4 methods.
Examples
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