[Rcpp-devel] How to access fields and methods of a RefClass from C++?

Romain Francois romain at r-enthusiasts.com
Thu May 30 15:15:38 CEST 2013


More easily, you can use Rcpp::Reference:

// [[Rcpp::export]]
std::string getId(Reference obj) {
     std::string txt = obj.field("id");
     return txt;
}

Here, you are isolated from the implementation of reference classes 
using environments and the .xData slot name.

Romain

Le 29/05/13 01:49, Dirk Eddelbuettel a écrit :
>
> On 28 May 2013 at 23:14, Anwar Ludin wrote:
> | Hello,
> |
> | I have a Reference class defined in R that I am passing as a parameter
> | to a C++ class using Rcpp. I am trying to access the fields of the
> | Reference class from C++ and I'm not sure how to do this.
>
> Well for starters your reference class object had no field price so that
> makes extracting it hard...
>
> But in essence:  a) reference classes are S4 objects, and as b) you can see
> from str() and unclass(), they contain an environment you can access. So try
> this modification of your code:
>
>
> library(Rcpp)
> library(methods)
>
> Instrument <-setRefClass(
>     Class="Instrument",
>     fields=list("id"="character", "description"="character")
> )
> Instrument$accessors(c("id", "description"))
>
> instrument <- Instrument$new(id="AAPL", description="Apple")
>
> cat("Instrument:\n")
> print(instrument)
> #print(str(instrument))
> cat("\n\nInstrument unclassed:\n")
> print(unclass(instrument))
> cat("\n\nInstrument .xData env.:\n")
> print(ls(instrument at .xData))
>
> cppFunction('
> std::string getId(S4 obj) {
>      // get the environment
>      Environment e = obj.slot(".xData");
>      // extract field
>      std::string txt = as<std::string>(e["id"]);
>      // return it
>      return txt;
> }')
>
> cat("\n\nId extracted from instrument:\n")
> print(getId(instrument))
>
>
>
> Hope this helps,  Dirk
>


-- 
Romain Francois
Professional R Enthusiast
+33(0) 6 28 91 30 30

R Graph Gallery: http://gallery.r-enthusiasts.com

blog:            http://blog.r-enthusiasts.com
|- http://bit.ly/Zs97qg  : highlight 0.4.1
`- http://bit.ly/10X94UM : Mobile version of the graph gallery



More information about the Rcpp-devel mailing list