[Rcpp-devel] copying or not when convering to arma

Dirk Eddelbuettel edd at debian.org
Thu Jul 11 09:50:39 CEST 2013

On 10 July 2013 at 11:58, Gabor Grothendieck wrote:
| Suppose we have this program where we have started and ended with SEXP
| and written out the as and wrap conversions to make them explicit.
| How many times is the data copied?
| Does as copy the underlying data?
| Does wrap?
| Is it copied elsewhere?
| Which file in the source code would one look to determine this?
| If it does copy the data is there some way to tell as and wrap to just
| point to it to avoid copying?
| #include <RcppArmadillo.h>
| // [[Rcpp::depends(RcppArmadillo)]]
| // [[Rcpp::export]]
| SEXP test(SEXP v) {
|    arma::vec va = Rcpp::as<arma::vec>(v);
|    SEXP vs = Rcpp::wrap(va);
|    return vs;
| }

You can reduce this to 

#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::export]]
arma::vec gabortest(arma::vec v) {
   return v;

because as<> and wrap() can get called automagically given that
RcppArmadillo provides them.

You want to start with the few header files we add to Armadillo in
RcppArmadillo (ie above the armadillo_bits/ directory which is verbatim

In this case, a copy is made. How to avoid this has been discussed a dozen
times here and is shown in FastLm.cpp as well.  

As for counts of objects:  I'd rather trust a good memory profiler than my
word :)  But approximately, one each as we have to go from R/Rcpp to
Armadillo (as use the easy way; for alternatives see above).  If you use just
Rcpp no copies are being made. 

Cheers from Sydney,  Dirk
| # run it from R
| sourceCpp("test.cpp")
| test(c(1.2, 1.3, 1.4))
| --
| Statistics & Software Consulting
| GKX Group, GKX Associates Inc.
| tel: 1-877-GKX-GROUP
| email: ggrothendieck at gmail.com
| _______________________________________________
| Rcpp-devel mailing list
| Rcpp-devel at lists.r-forge.r-project.org
| https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel

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

More information about the Rcpp-devel mailing list