Provides an easy way to fill an environment with active bindings that call a C++ function.
It's easy to create active bindings in R via
makeActiveBinding(). This package faciliates the creation of active bindings that link back to C++ code. It provides an interface that allows binding several identifiers in an environment to the same C++ function, which is then called with the name (and a payload) as argument.
You can install bindrcpp from github with:
The following C++ module exports a function
test_tolower_bindings() that creates active bindings that return the binding name in lowercase.
// [[Rcpp::depends(bindrcpp)]]SEXP// [[Rcpp::export]]SEXP
This function can be called from R:
env <- test_tolower_bindings(c("Converting", "to", "LOWERCASE"), .GlobalEnv)ls(env)#>  "Converting" "LOWERCASE" "to"env$Converting#>  "converting"env$to#>  "to"env$LOWERCASE#>  "lowercase"env$y#> NULL
The bindings are read-only:
env$Converting <- "CONVERTING"#> Error: Binding is read-only.
Initial CRAN release.
create_env_string()creates an environment with active bindings, with names given as a character vector. Access of these bindings triggers a call to a C++ function with a fixed signature (
GETTER_FUNC_STRING); this call contains the name of the binding (as character) and an arbitrary payload (
PAYLOAD, essentially a wrapped
create_env_symbol()is similar, the callback function accepts the name of the binding as symbol instead of character (
populate_env_symbol()populate an existing environment instead of creating a new one.
#include <bindrcpp.h>to access these functions from your package.