On 7 August 2016 at 07:17, JJ Allaire wrote: | In the latter case the integer matrix is "converted" to a numeric matrix via a | copy which is why your modification doesn't work.
"What he said..." This is a known issue which we presented many times in talks. Something from the most recent one is below. | 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. "What he said..." But this is something we cannot enforce from the Rcpp side, nor can we enforce it as you had hope for. C/C++ just don't work that way. The promised example is here. Run the two examples to the output, and study the difference: ----------------------------------------------------------------------------- ## NumericVector: A Second Example A second example alters a numeric vector: ```cpp #include <Rcpp.h> // [[Rcpp::export]] NumericVector f(NumericVector m) { m(0) = 0; return m; } ``` ## NumericVector: A Second Example Calling the last example with an integer vector: \small ```{r numVecEx3-a} Rcpp::sourceCpp("code/numVecEx3.cpp") x <- 1:3 # same as c(1L, 2L, 3L) print(data.frame(x=x, fx=f(x)), row.names=FALSE) ``` ## NumericVector: A Second Example Calling the last example with a numeric vector: ```{r numVecEx3-b} x <- c(1.0, 2.0, 3.0) print(data.frame(x=x, fx=f(x)), row.names=FALSE) ``` We pass `x` as a `SEXP` which is a pointer. Use `Rcpp::clone()` for deep copy. ----------------------------------------------------------------------------- For what it is worth that is on slides 74 to 76 of http://dirk.eddelbuettel.com/papers/jsm2016_rcpp_course.pdf Hth, Dirk -- http://dirk.eddelbuettel.com | @eddelbuettel | e...@debian.org _______________________________________________ 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