[Rcpp-devel] R classes extending C++ classes

John Chambers jmc at stat.stanford.edu
Fri Apr 20 18:46:57 CEST 2012


As of a recent version of Rcpp on r-forge (rev. 3582 or later), there is 
a new facility for defining  an R class extending a C++ class extracted 
from a module.

The main tool is setRcppClass in package Rcpp.  See its documentation.

Also in the unittests directory of package Rcpp is an example package, 
testRcppClass, that has some typical applications.

The general idea is that setRcppClass() defines a reference class built 
around a particular C++ class, with optionally additional fields and 
methods defined in R.

The R methods can refer to C++ fields and methods.

The general goal is to be able to use R for prototyping new features 
that could then be implemented in C++ if they are useful and need 
performance.

The new code relies on load-time actions, introduced in R 2.15.0, 
because information about the C++ class is not available until the 
compiled code is linked with the R process.  Load time actions allow a 
package to include setRcppClass() calls in its source code in the same 
way other class/method definitions would be.  But the action all really 
happens at load time.  In particular, any extensions to these classes 
have to be done at load time as well, using load actions or 
setRcppClass() calls.

This is all new stuff and still experimental.  There are a couple of 
known limitations, plus probably unknown glitches.  For now, objects 
from modules need to be explicitly exported if your package wants to 
export them.  (Classes are exported either explicitly or by pattern).

Also, when running your package through CMD check, you may get bizarre 
complaints about loading the package with only base attached.  And you 
will very likely get notes about code for any reference class methods 
that refer to field names, which codetools can't distinguish from global 
variables.

John



More information about the Rcpp-devel mailing list