[Rcpp-devel] Integer matrices in Rcpp and Armadillo

Simon Zehnder szehnder at uni-bonn.de
Fri Jun 7 13:09:28 CEST 2013

HI Dirk, hi Romain,

allright, this is now clear to me, if I want to reuse memory, the allocated memory from R (so implicitly in C) must of course have the same type - otherwise the memory has a different size. 

On the other side I then assume, that the Rcpp:as<class M>() function makes a cast and therefore creates a copy with new allocated memory of the type included in M? Therefore a reuse of memory with this function is not possible. 



On Jun 6, 2013, at 8:31 PM, Dirk Eddelbuettel <edd at debian.org> wrote:

> On 6 June 2013 at 13:17, Dirk Eddelbuettel wrote:
> | 
> | On 6 June 2013 at 19:05, Simon Zehnder wrote:
> | | sorry I had overseen this message from you. Okay, so the explicit cast to SEXP together with the assignment operator makes the deal. But it still includes the reuse of memory right, i.e. the '=' does not call the copy constructor? 
> | 
> | But how could an _unsigned int_ from Armadillo possibly have the same value
> | as a _signed int_ in R?
> | 
> | Either you are efficient (no copy), or you are correct (with a copy). I do
> | not see how you could have both.
> Sorry -- please ignore this message. 
> I had mistakenly assumed that you were still thinking about arma::umat to
> integer.  For direct int-to-int this is indeed efficient just like the
> double-to-double is for arma::mat to NumericMatrix (and dito for vectors).  I
> though that was a given -- maybe need to make this (even) more explicit in
> the documentation.
> So in sum: you get correct and efficient behaviour if and only if you stick
> with the types natively supported in Armadillo and R.
> Dirk
> -- 
> Dirk Eddelbuettel | edd at debian.org | http://dirk.eddelbuettel.com

More information about the Rcpp-devel mailing list