On 26 November 2014 at 02:13, Yixuan Qiu wrote: | Hello David, | The general answer to your question is, if the type of your matrix (integer or | numeric) in R is different from the one you declare in Rcpp, Rcpp will make a | copy and cast it to the appropriate type.
Precisely. | For example, 1:12 is of type integer, and if you pass it as a NumericMatrix, | Rcpp will implicitly copy the whole matrix, so no matter what modification you | did, the original matrix will not change. This is discussed in a few places, often a standard topic in our (older) slide decks and came up here a few times. Rcpp generally uses a very light wrapper around a direct pointer to the actual R object, so changes affect it. However, in two cases you are shielded: when an implicit copy is made (often from integer to numeric as Yixuan said) or when an explicit copy is requested via clone(). Dirk | Best, | Yixuan | | On Nov 26, 2014 1:33 AM, "David Shih" <david.s...@mail.utoronto.ca> wrote: | | Hello, | | There was an earlier post on this subject, but based on my experimentation, | the behaviour of modifying input argument is different depending on how the | matrix was initialization and other factors... | | I wrote a Rcpp function to modify an input matrix. After calling this | function, the input matrix is modified under some circumstances and not | modified under others. The behaviour is the same on repeat runs and on both | Linux (3.16.3-1-ARCH) and Mac (OSX 10.9). | | The R script, C++ code, and the results are available on Bitbucket: | | https://bitbucket.org/dshih/rcpp_inplace | | I don't quite understand when the input matrix is modified in place by the | Rcpp function and when the input matrix is be copied on write in the Rcpp | function. | | When I stay within Rcpp/C++, a input argument can be modified in-place by a | function. (This feature was critical to my optimization.) | | After the code returns to R, I would expect either copy-on-write or | in-place modification but not both. | | What is the correct behaviour? | | | Thank you, | | David J. H. Shih | | The Hospital for Sick Children | Peter Gilgan Centre for Research and Learning | 686 Bay St | 17th floor, Room 17.9707 | Toronto, ON M5G 0A4 | Canada | Tel: (416) 813-7654 x309157 | _______________________________________________ | 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 -- 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