Hi,

If we declare the following toy function where a numeric matrix is passed by 
reference,
it works as expected, the matrix m is modified "in place":

cppFunction('
mat m2(mat& m) {
   m=m*2;
   return(m);
}', depends="RcppArmadillo", inc="using namespace arma;")
m=matrix(1:4, 2)+pi
m2(m)
          [,1]     [,2]
[1,]  8.283185 12.28319
[2,] 10.283185 14.28319
m
          [,1]     [,2]
[1,]  8.283185 12.28319
[2,] 10.283185 14.28319

But if we pass to imat type, the call by reference is no more functionning:
cppFunction('
imat im2(imat& m) {
   m=m*2;
   return(m);
}', depends="RcppArmadillo", inc="using namespace arma;")
im=matrix(1:4, 2)
im2(im)
     [,1] [,2]
[1,]    2    6
[2,]    4    8
im
     [,1] [,2]
[1,]    1    3
[2,]    2    4

The original matrix im remains as it was.
You can easyly verify that the same is true for ivec type.
Is it intended behaviour?

Serguei.
R version 3.2.0 (2015-04-16)
> packageVersion("Rcpp")
[1] ‘0.12.0’
> packageVersion("RcppArmadillo")
[1] ‘0.5.500.2.0’


_______________________________________________
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

Reply via email to