<div dir="ltr">This is by design; we pass objects by reference for efficiency. Use `Rcpp::clone()` to explicitly duplicate objects.</div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Apr 14, 2015 at 10:15 AM, <span dir="ltr"><<a href="mailto:soeren.vogel@posteo.ch" target="_blank">soeren.vogel@posteo.ch</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello,<br>
<br>
I have just noticed that my small Rcpp function changes the original matrix on the R side -- why and how to pass by copy?<br>
<br>
Thanks<br>
Sören<br>
<br>
<source c++><br>
#include <Rcpp.h><br>
using namespace Rcpp;<br>
<br>
// [[Rcpp::export]]<br>
NumericMatrix test_min( NumericMatrix M ) {<br>
int n = M.nrow();<br>
for ( int i = 0; i < n; ++i ) {<br>
for ( int j = 0; j < n; ++j ) {<br>
M(i, j) = M(i, j) * 2.0;<br>
}<br>
}<br>
return M;<br>
}<br>
</source><br>
<br>
<source R><br>
library( 'Rcpp' )<br>
mat <- matrix(runif(4), nrow=2)<br>
sourceCpp('min.cpp')<br>
test_min(mat) # mat * 2<br>
test_min(mat) # mat * 2 * 2<br>
test_min(mat) #...<br>
mat<br>
</source><br>
<br>
_______________________________________________<br>
Rcpp-devel mailing list<br>
<a href="mailto:Rcpp-devel@lists.r-forge.r-project.org">Rcpp-devel@lists.r-forge.r-project.org</a><br>
<a href="https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel" target="_blank">https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel</a></blockquote></div><br></div>