Title: | Automatic Method Generation from R6 |
---|---|
Description: | After defining an R6 class, R62S3 is used to automatically generate optional S3/S4 generics and methods for dispatch. Also allows piping for R6 objects. |
Authors: | Raphael Sonabend [aut, cre] |
Maintainer: | Raphael Sonabend <[email protected]> |
License: | MIT + file LICENSE |
Version: | 1.4.3 |
Built: | 2024-11-17 03:39:54 UTC |
Source: | https://github.com/xoopr/r62s3 |
Auto-generates functions from an R6 Class.
R62Fun( R6Class, assignEnvir = parent.env(environment()), detectGeneric = TRUE, mask = FALSE, dispatchClasses = list(R6Class), scope = "public", arg1 = "object", exclude = NULL )
R62Fun( R6Class, assignEnvir = parent.env(environment()), detectGeneric = TRUE, mask = FALSE, dispatchClasses = list(R6Class), scope = "public", arg1 = "object", exclude = NULL )
R6Class |
R6ClassGenerator to generate public methods from |
assignEnvir |
environment in which to assign the generics/methods, default is parent of current environment. |
detectGeneric |
logical, if TRUE (default) detects if the method has a S3 or S4 generic and defines functions accordingly |
mask |
logical, determines if non-generic functions should be masked if found, see details. |
dispatchClasses |
list of classes to assign dispatch methods on |
scope |
determines the scope of methods that should be copied, either |
arg1 |
if |
exclude |
an optional character vector naming the public methods or active bindings to exclude from the generator |
If scope == "public"
then searches in a given R6::R6Class for all public methods that are not initialize
or clone
.
If scope == "active"
then searches for all active bindings. Currently there is only support for
calling active bindings but not setting them. If scope == c("public", active")
then both are included.
Any methods/bindings passed to exclude
will be ignored in the search.
If mask == TRUE
then the generator ignores if a generic or method of the same name exists and will
create a new function. If
mask == FALSE
then the generator will create a new generic only if an existing generic does not
already exist. Methods and generics are created using standard convention.
The optional dispatchClasses
argument takes a list of R6::R6Classes and allows methods to be
created for multiple classes at one time.
S3 generics are detected with utils::isS3stdGeneric()
and S4 generics are detected with methods::.S4methods()
.
Assigns generics/methods/functions to the chosen environment.
printMachine <- R6::R6Class("printMachine", public = list(initialize = function() {}, printer = function(str) print(str)), active = list(Status = function() "Printing")) pm <- printMachine$new() # scope = public R62Fun(printMachine, assignEnvir = topenv()) printer(pm, "Test String B") # scope = active R62Fun(printMachine, assignEnvir = topenv(), scope = 'active') # note support for accessing only, cannot assign # values to an active binding Status(pm)
printMachine <- R6::R6Class("printMachine", public = list(initialize = function() {}, printer = function(str) print(str)), active = list(Status = function() "Printing")) pm <- printMachine$new() # scope = public R62Fun(printMachine, assignEnvir = topenv()) printer(pm, "Test String B") # scope = active R62Fun(printMachine, assignEnvir = topenv(), scope = 'active') # note support for accessing only, cannot assign # values to an active binding Status(pm)
Auto-generates S3 generics from an R6 Class.
R62S3( R6Class, dispatchClasses = list(R6Class), assignEnvir = parent.env(environment()), mask = FALSE, scope = "public", arg1 = "object", exclude = NULL )
R62S3( R6Class, dispatchClasses = list(R6Class), assignEnvir = parent.env(environment()), mask = FALSE, scope = "public", arg1 = "object", exclude = NULL )
R6Class |
R6ClassGenerator to generate public methods from |
dispatchClasses |
list of classes to assign dispatch methods on |
assignEnvir |
environment in which to assign the generics/methods, default is parent of current environment. |
mask |
logical, determines if non-generic functions should be masked if found, see details. |
scope |
determines the scope of methods that should be copied, either |
arg1 |
if |
exclude |
an optional character vector naming the public methods or active bindings to exclude from the generator |
If scope == "public"
then searches in a given R6::R6Class for all public methods that are not initialize
or clone
.
If scope == "active"
then searches for all active bindings. Currently there is only support for
calling active bindings but not setting them. If scope == c("public", active")
then both are included.
Any methods/bindings passed to exclude
will be ignored in the search.
If mask == TRUE
then the generator ignores if a generic or method of the same name exists and will
create a new S3 generic/method. If
mask == FALSE
then the generator will create a new generic only if an existing generic does not
already exist. Methods and generics are created using standard convention.
The optional dispatchClasses
argument takes a list of R6::R6Classes and allows methods to be
created for multiple classes at one time.
S3 generics are detected with utils::isS3stdGeneric()
.
Assigns generics/methods/functions to the chosen environment.
printMachine <- R6::R6Class("printMachine", public = list(initialize = function() {}, printer = function(str) print(str)), active = list(Status = function() "Printing")) pm <- printMachine$new() # scope = public R62S3(printMachine, assignEnvir = topenv()) printer(pm, "Test String B") # scope = active R62S3(printMachine, assignEnvir = topenv(), scope = 'active') # note support for accessing only, cannot assign # values to an active binding Status(pm)
printMachine <- R6::R6Class("printMachine", public = list(initialize = function() {}, printer = function(str) print(str)), active = list(Status = function() "Printing")) pm <- printMachine$new() # scope = public R62S3(printMachine, assignEnvir = topenv()) printer(pm, "Test String B") # scope = active R62S3(printMachine, assignEnvir = topenv(), scope = 'active') # note support for accessing only, cannot assign # values to an active binding Status(pm)
Auto-generates S4 generics from an R6 Class.
R62S4( R6Class, dispatchClasses = list(R6Class), assignEnvir = parent.env(environment()), mask = FALSE, scope = "public", arg1 = "object", exclude = NULL )
R62S4( R6Class, dispatchClasses = list(R6Class), assignEnvir = parent.env(environment()), mask = FALSE, scope = "public", arg1 = "object", exclude = NULL )
R6Class |
R6ClassGenerator to generate public methods from |
dispatchClasses |
list of classes to assign dispatch methods on |
assignEnvir |
environment in which to assign the generics/methods, default is parent of current environment. |
mask |
logical, determines if non-generic functions should be masked if found, see details. |
scope |
determines the scope of methods that should be copied, either |
arg1 |
if |
exclude |
an optional character vector naming the public methods or active bindings to exclude from the generator |
If scope == "public"
then searches in a given R6::R6Class for all public methods that are not initialize
or clone
.
If scope == "active"
then searches for all active bindings. Currently there is only support for
calling active bindings but not setting them. If scope == c("public", active")
then both are included.
Any methods/bindings passed to exclude
will be ignored in the search.
If mask == TRUE
then the generator ignores if a generic or method of the same name exists and will
create a new S4 generic/method. If
mask == FALSE
then the generator will create a new generic only if an existing generic does not
already exist. Methods and generics are created using standard convention.
The optional dispatchClasses
argument takes a list of R6::R6Classes and allows methods to be
created for multiple classes at one time.
S4 generics are detected with methods::.S4methods()
.
Assigns generics/methods/functions to the chosen environment.
Assigns methods and generics to the chosen environment.
methods::setMethod methods::setGeneric
printMachine <- R6::R6Class("printMachine", public = list(initialize = function() {}, printer = function(str) print(str)), active = list(Status = function() "Printing")) pm <- printMachine$new() # scope = public R62S4(printMachine, assignEnvir = topenv()) printer(pm, "Test String B") # scope = active R62S4(printMachine, assignEnvir = topenv(), scope = 'active') # note support for accessing only, cannot assign # values to an active binding Status(pm)
printMachine <- R6::R6Class("printMachine", public = list(initialize = function() {}, printer = function(str) print(str)), active = list(Status = function() "Printing")) pm <- printMachine$new() # scope = public R62S4(printMachine, assignEnvir = topenv()) printer(pm, "Test String B") # scope = active R62S4(printMachine, assignEnvir = topenv(), scope = 'active') # note support for accessing only, cannot assign # values to an active binding Status(pm)