In the latter case the integer matrix is "converted" to a numeric matrix via a copy which is why your modification doesn't work.
That said, modifying an object in place violates R's language semantics and could lead to incorrect computations (i.e. users expect that objects are immutable and this is part of what ensures the integrity of computations) so this is strongly discouraged. On Sun, Aug 7, 2016 at 7:00 AM, Kaspar Märtens <kaspar.mart...@gmail.com> wrote: > Hi, > > When experimenting with the following toy function, > > // [[Rcpp::export]] > void modify_matrix(NumericMatrix A){ > A(0, 0) = 5; > } > > and applying this on matrices defined in R, I occasionally noticed > unexpected behaviour (as it turns out, on integer matrices). > > ### Example 1 (works as expected) > > A = matrix(0, 2, 2) > modify_matrix(A) > A > > ## [,1] [,2] > ## [1,] 5 0 > ## [2,] 0 0 > > ### Example 2 (does not modify the matrix) > > A = matrix(1:4, 2, 2) > modify_matrix(A) > A > > ## [,1] [,2] > ## [1,] 1 3 > ## [2,] 2 4 > > I realised that in the latter case, A consists of integers, so I guess I > should be using an IntegerMatrix version of my function instead. However, > shouldn't Rcpp detect the type mismatch between NumericMatrix and > IntegerMatrix? > > Best, > Kaspar > > > _______________________________________________ > 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 >
_______________________________________________ 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