[Rcpp-devel] Rcpp: Modification of input argument: Undefined behaviour

Yixuan Qiu yixuan.qiu at cos.name
Wed Nov 26 08:13:58 CET 2014


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.
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.

Best,
Yixuan
On Nov 26, 2014 1:33 AM, "David Shih" <david.shih at 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 at lists.r-forge.r-project.org
> https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20141126/3c84fac1/attachment.html>


More information about the Rcpp-devel mailing list