[Rcpp-devel] Accessing an attribute object in C/C++

Silkworth,David J. SILKWODJ at airproducts.com
Thu Jul 12 05:41:39 CEST 2012

I have built the following example in order to demonstrate my concern.  In reality I am obtaining an object such as the example mymat with an attached vector as an attribute from Douglas Bates' 1998 C code for spline_basis in the splines package.  It seems that back in the days of stone knives and clubs (before Rcpp) this was indeed a unique way of passing a list of objects back to R.

Some may recall that I have ripped splines.c successfully into a new package project, keeping the original code intact, complete with its identity.

My desire is to build calling code without any need to go back to the R interpreter , hoping for optimal performance.  As can be seen, by grabbing the attr() function using what I call the "environment facility" of Rcpp to extract the attached vector violates my best intentions.

I am hoping for a pure C/C++ way of accessing the vector that returns as an attribute.

One possibility might be a C function that takes the SEXP object with the attribute, and returns just the attrubute as a separate SEXP object.  Alas, this is too far over my head at the moment.

src<- '
Rcpp::NumericMatrix m_rcpp(arg1);
arma::mat m_arma   = Rcpp::as<arma::mat>(arg1); 
Environment base("package:base");
Function getAttrib = base["attr"];
Rcpp::NumericVector v_rcpp(4);
v_rcpp = getAttrib(m_rcpp,"attachment");
arma::vec v_arma   = Rcpp::as<arma::vec>(v_rcpp); 


    body = src, plugin = "RcppArmadillo")

## R test code:


More information about the Rcpp-devel mailing list