| GenericFunctions {methods} | R Documentation |
Tools for Managing Generic Functions
Description
The functions documented here manage collections of methods associated with a generic function, as well as providing information about the generic functions themselves.
Usage
isGeneric(f, where, fdef, getName = FALSE)
isGroup(f, where, fdef)
removeGeneric(f, where)
standardGeneric(f)
dumpMethod(f, signature, file, where, def)
existsFunction(f, generic = TRUE, where)
findFunction(f, generic=TRUE)
dumpMethods(f, file, signature, methods, where)
signature(...)
removeMethods(f, where)
setReplaceMethod(f, ...)
getGenerics(where, searchForm = FALSE)
allGenerics(where, searchForm = FALSE)
callGeneric(...)
Arguments
f |
The character string naming the function. |
where |
Where on the search list of attached packages to look for functions or methods. By default, use the whole search list to find the relevant object(s). |
signature |
The class signature of the relevant method. A
signature is a named or unnamed vector of character strings. If
named, the names must be formal argument names for the generic
function. If |
file |
The file on which to dump method definitions. |
def |
The function object defining the method; if omitted, the current method definition corresponding to the signature. |
... |
Named or unnamed arguments to form a signature. |
generic |
In testing or finding functions, should generic
functions be included. Supply as |
fdef |
Optional, the generic function definition. Usually omitted in calls to |
getName |
If |
methods |
The methods object containing the methods to be dumped. By default,
the methods defined for this generic (optionally on the specified
|
searchForm |
In |
Summary of Functions
isGeneric:-
Is there a function named
f, and if so, is it a generic?The
getNameargument allows a function to find the name from a function definition. If it isTRUEthen the name of the generic is returned, orFALSEif this is not a generic function definition.The behavior of
isGenericandgetGenericfor primitive functions is slightly different. These functions don't exist as formal function objects (for efficiency and historical reasons), regardless of whether methods have been defined for them. A call toisGenerictells you whether methods have been defined for this primitive function, anywhere in the current search list, or in the specified positionwhere. In contrast, a call togetGenericwill return what the generic for that function would be, even if no methods have been currently defined for it. removeGeneric,removeMethods:-
Remove the all the methods for the generic function of this name. In addition,
removeGenericremoves the function itself;removeMethodsrestores the non-generic function which was the default method. If there was no default method,removeMethodsleaves a generic function with no methods. standardGeneric:-
Dispatches a method from the current function call for the generic function
f. It is an error to callstandardGenericanywhere except in the body of the corresponding generic function. getMethods:-
The list of methods for the specified generic.
dumpMethod:-
Dump the method for this generic function and signature.
existsFunction:-
Is there a function of this name. If
genericisFALSE, generic functions are not counted. findFunction:-
return all the elements of the search list on which a function definition for
nameexists.NOTE: Use this rather than
findwithmode="function", which is not as meaningful, and has a few subtle bugs from its use of regular expressions. selectMethod:-
Returns the method (a function) that R would use to evaluate a call to this generic, with arguments corresponding to the specified signature.
f= the name of the generic function,signatureis the signature of classes to match to the arguments off. dumpMethods:-
Dump all the methods for this generic.
signature:-
Returns a named list of classes to be matched to arguments of a generic function.
getGenerics:Returns the names of the generic functions that have methods defined on
where; this argument can be an environment or an index into the search list. By default, the whole search list is used.The methods definitions are stored with package qualifiers; for example, methods for function
"initialize"might refer to two different functions of that name, on different packages. The package names corresponding to the method list object are contained in the slotpackageof the returned object. The form of the returned name can be plain (e.g.,"base"), or in the form used in the search list ("package:base") according to the value ofsearchFormcallGeneric:-
In the body of a method, this function will make a call to the current generic function. If no arguments are passed to
callGeneric, the arguments to the current call are passed down; otherwise, the arguments are interpreted as in a call to the generic function.
Details
setGeneric:-
If there is already a non-generic function of this name, it will be used to define the generic unless
defis supplied, and the current function will become the default method for the generic.If
defis supplied, this defines the generic function, and no default method will exist (often a good feature, if the function should only be available for a meaningful subset of all objects).Arguments
groupandvalueClassare retained for consistency with S-Plus, but are currently not used. isGeneric:-
If the
fdefargument is supplied, take this as the definition of the generic, and test whether it is really a generic, withfas the name of the generic. (This argument is not available in S-Plus.) removeGeneric:-
If
wheresupplied, just remove the version on this element of the search list; otherwise, removes the first version encountered. standardGeneric:-
Generic functions should usually have a call to
standardGenericas their entire body. They can, however, do any other computations as well.The usual
setGeneric(directly or through callingsetMethod) creates a function with a call tostandardGeneric. getMethods:-
If the function is not a generic function, returns
NULL. Thefargument can be either the character string name of the generic or the object itself.The
whereargument optionally says where to look for the function, iffis given as the name. dumpMethod:-
The resulting source file will recreate the method.
findFunction:-
If
genericisFALSE, ignore generic functions. selectMethod:-
The vector of strings for the classes can be named or not. If named, the names must match formal argument names of
f. If not named, the signature is assumed to apply to the arguments offin order.If
mustFindisTRUE, an error results if there is no method (or no unique method) corresponding to this signature. Otherwise may returnNULLor a MethodsList object. dumpMethods:-
If
signatureis supplied only the methods matching this initial signature are dumped. (This feature is not found in S-Plus: don't use it if you want compatibility.) signature:-
The advantage of using
signatureis to provide a check on which arguments you meant, as well as clearer documentation in your method specification. In addition,signaturechecks that each of the elements is a single character string. removeMethods:-
Returns
TRUEiffwas a generic function,FALSE(silently) otherwise.If there is a default method, the function will be re-assigned as a simple function with this definition. Otherwise, the generic function remains but with no methods (so any call to it will generate an error). In either case, a following call to
setMethodwill consistently re-establish the same generic function as before.
References
The R package methods implements, with a few exceptions, the
programming interface for classes
and methods in the book Programming with Data (John
M. Chambers, Springer, 1998), in particular sections 1.6, 2.7, 2.8,
and chapters 7 and 8.
While the programming interface for the methods package follows the reference, the R software is an original implementation, so details in the reference that reflect the S4 implementation may appear differently in R. Also, there are extensions to the programming interface developed more recently than the reference. For a discussion of details and ongoing development, see the web page http://developer.r-project.org/methodsPackage.html and the pointers from that page.
See Also
setGeneric,
setClass,
showMethods
Examples