<html dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style id="owaParaStyle" type="text/css">P {margin-top:0;margin-bottom:0;}</style>
</head>
<body ocsi="0" fpstyle="1">
<div style="direction: ltr;font-family: Tahoma;color: #000000;font-size: 10pt;">Hi,<br>
<br>
I was recently hunting down a bug in my code, and stumbled upon a slightly incoherent behaviour in Rcpp/RcppArmadillo. In my real application I have a class which data members are initialized in initialization list from the Rcpp List using as<arma::cube>. For
 example, I have a member y which I initialize by y(as<arma::cube>(xlist["y"])). This caused some headaches if I later modified data member y, as the y in the list on R side was modified as well. I then realized that I need to use Rcpp::clone in order to make
 a deep copy of xlist object. But, this does not need to be done when initializing arma::vec or arma::mat. Is this purposeful or am I missing something?<br>
<br>
Simple example:<br>
<br>
void test1(const NumericVector& x) {<br>
  arma::cube ycube(as<arma::cube>(x));<br>
  ycube(0) = 0.5;<br>
}<br>
<br>
> y <- array(1:4, c(2,2,1)) #y is integer type, using automatic copy<br>
> test1(y)<br>
> y<br>
, , 1<br>
<br>
     [,1] [,2]<br>
[1,]    1    3<br>
[2,]    2    4<br>
<br>
> y <- array(as.numeric(1:4), c(2,2,1)) #y is numeric, no copy<br>
> test1(y)<br>
> y<br>
, , 1<br>
<br>
     [,1] [,2]<br>
[1,]  0.5    3<br>
[2,]  2.0    4<br>
<br>
<br>
But in case of arma::vec (or arma::mat), copying is always done:<br>
<br>
void test2(const NumericVector& x) {<br>
  arma::vec yvec(as<arma::vec>(x));<br>
  yvec(0) = 0.5;<br>
}<br>
<br>
> y <- as.numeric(1:8)<br>
> test2(y)<br>
> y<br>
[1] 1 2 3 4 5 6 7 8<br>
<br>
Best regards,<br>
<br>
Jouni Helske<br>
<br>
</div>
</body>
</html>