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

Dirk Eddelbuettel edd at debian.org
Wed May 29 01:49:59 CEST 2013


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

-- 
Dirk Eddelbuettel | edd at debian.org | http://dirk.eddelbuettel.com


More information about the Rcpp-devel mailing list