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