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

John Chambers jmc at stat.stanford.edu
Tue Apr 24 19:05:35 CEST 2012


The two limitations mentioned below, export patterns and loading warning 
from CMD check, should have been fixed in the current versions of 
r-devel and 2.15 patched.  The "global variables" note remains, but it's 
been remarked often in other contexts as well.

John

On 4/20/12 9:46 AM, John Chambers wrote:
> 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
>
> _______________________________________________
> Rcpp-devel mailing list
> Rcpp-devel at lists.r-forge.r-project.org
> https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
>


More information about the Rcpp-devel mailing list