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); 

 return(Rcpp::List::create(Rcpp::Named("origMatrix")=wrap(m_arma),
               Rcpp::Named("origVector")=wrap(v_arma)));
 '

attr_sep<-cxxfunction(signature(arg1="numeric"),
    body = src, plugin = "RcppArmadillo")


## R test code:
mymat<-matrix(1:12,3,4)
myvec<-rep(5,4)
attr(mymat,"attachment")<-myvec

return_list<-attr_sep(mymat)



_______________________________________________
Rcpp-devel mailing list
Rcpp-devel@lists.r-forge.r-project.org
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel

Reply via email to