R: Creates an S3 method

setMethodS3 {R.methodsS3} | R Documentation

## Creates an S3 method

### Description

Creates an S3 method. A function with name `<name>.<class>` will be set to `definition`. The method will get the modifiers specified by `modifiers`. If there exists no generic function for this method, it will be created automatically.

### Usage

    ## Default S3 method:
    setMethodS3(name, class="default", definition, private=FALSE, protected=FALSE,
      export=FALSE, static=FALSE, abstract=FALSE, trial=FALSE, deprecated=FALSE,
      envir=parent.frame(), overwrite=TRUE, conflict=c("warning", "error", "quiet"),
      createGeneric=TRUE, exportGeneric=TRUE, appendVarArgs=TRUE,
      validators=getOption("R.methodsS3:validators:setMethodS3"), ...)

### Arguments

`name` | The name of the method.
`class` | The class for which the method should be defined. If `class == "default"` a function with name `<name>.default` will be created.
`definition` | The method defintion.
`private, protected` | If `private=TRUE`, the method is declared private. If `protected=TRUE`, the method is declared protected. In all other cases the method is declared public.
`export` | A `logical` setting attribute `"export"`.
`static` | If `TRUE` this method is defined to be static, otherwise not. Currently this has no effect expect as an indicator.
`abstract` | If `TRUE` this method is defined to be abstract, otherwise not. Currently this has no effect expect as an indicator.
`trial` | If `TRUE` this method is defined to be a trial method, otherwise not. A trial method is a method that is introduced to be tried out and it might be modified, replaced or even removed in a future release. Some people prefer to call trial versions, beta version. Currently this has no effect expect as an indicator.
`deprecated` | If `TRUE` this method is defined to be deprecated, otherwise not. Currently this has no effect expect as an indicator.
`envir` | The environment for where this method should be stored.
`overwrite` | If `TRUE` an already existing method with the same name (and of the same class) will be overwritten, otherwise not.
`conflict` | If a method already exists with the same name (and of the same class), different actions can be taken. If `"error"`, an exception will be thrown and the method will not be created. If `"warning"`, a `warning` will be given and the method will be created, otherwise the conflict will be passed unnotice.
`createGeneric, exportGeneric` | If `createGeneric=TRUE`, a generic S3/UseMethod function is defined for this method, iff missing, and `exportGeneric` species attribute `"export"` of it.
`appendVarArgs` | If `TRUE`, argument `...` is added with a warning, if missing. For special methods such as `$` and `[[`, this is never done (argument is ignored). This will increase the chances that the method is consistent with a generic function with many arguments and/or argument `...`.
`validators` | An optional `list` of `function`s that can be used to assert that the generated method meets certain criteria.
`...` | Passed to `setGenericS3`(), iff called.

### Author(s)

Henrik Bengtsson

### See Also

For more information about S3, see `UseMethod`().

### Examples

    ######################################################################
    # Example 1
    ######################################################################
    setMethodS3("foo", "default", function(x, ...) {
      cat("In default foo():\n");
      print(x, ...);
    })

    setMethodS3("foo", "character", function(s, ...) {
      cat("In foo() for class 'character':\n");
      print(s, ...);
    })

    # The generic function is automatically created!
    print(foo)

    foo(123)
    foo("123")

    ######################################################################
    # Example 2
    #
    # Assume that in a loaded package there is already a function bar(),
    # but you also want to use the name 'bar' for the character string.
    # It may even be the case that you do not know of the other package,
    # but your users do!
    ######################################################################
    # bar() in other package
    bar <- function(x, y, ...) {
      cat("In bar() of 'other' package.\n");
    }

    # Your defintion; will redefine bar() above to bar.default().
    setMethodS3("bar", "character", function(object, ...) {
      cat("In bar() for class 'character':\n");
      print(object, ...);
    })

    bar(123)
    bar("123")

[Package R.methodsS3 version 1.7.1 Index]