method<- {S7}R Documentation

Register a S7 method for a generic

Description

A generic defines the interface of a function. Once you have created a generic with new_generic(), you provide implementations for specific signatures by registering methods with ⁠method<-⁠.

The goal is for ⁠method<-⁠ to be the single function you need when working with S7 generics or S7 classes. This means that as well as registering methods for S7 classes on S7 generics, you can also register methods for S7 classes on S3 or S4 generics, and S3 or S4 classes on S7 generics. But this is not a general method registration function: at least one of generic and signature needs to be from S7.

Note that if you are writing a package, you must call methods_register() in your .onLoad. This ensures that all methods are dynamically registered when needed.

Usage

method(generic, signature) <- value

Arguments

generic

A generic function, i.e. an S7 generic, an external generic, an S3 generic, or an S4 generic.

signature

A method signature.

For S7 generics that use single dispatch, this must be one of the following:

For S7 generics that use multiple dispatch, this must be a list of any of the above types.

For S3 generics, this must be a single S7 class.

For S4 generics, this must either be an S7 class, or a list that includes at least one S7 class.

value

A function that implements the generic specification for the given signature.

Value

The generic, invisibly.

Examples

# Create a generic
bizarro <- new_generic("bizarro", "x")
# Register some methods
method(bizarro, class_numeric) <- function(x) rev(x)
method(bizarro, new_S3_class("data.frame")) <- function(x) {
  x[] <- lapply(x, bizarro)
  rev(x)
}

# Using a generic calls the methods automatically
bizarro(head(mtcars))

[Package S7 version 0.1.1 Index]