> The `mode()` function was pretty useless for determining a matrix object's type
Use the storage.mode() function. Bill Dunlap TIBCO Software wdunlap tibco.com On Wed, Nov 26, 2014 at 9:06 AM, David Shih <david.s...@mail.utoronto.ca> wrote: > Hi Yixuan, > > > You're right! > > > Whether the input matrix can be modified by a function that takes > NumericMatrix is determined by whether the input matrix is a NumericMatrix > or an IntegerMatrix (the latter needs to be copied and converted). The > `mode()` function was pretty useless for determining a matrix > object's type, but as at least `is.integer()` is predictive. > > > When I wrote another function that takes an IntegerMatrix, it was able > to modify an input IntegerMatrix in-place. > > > Thank you, > > David > > > ------------------------------ > *From:* Yixuan Qiu <yixuan....@cos.name> > *Sent:* November 26, 2014 2:13 AM > *To:* David Shih > *Cc:* rcpp-devel@lists.r-forge.r-project.org > *Subject:* Re: [Rcpp-devel] Rcpp: Modification of input argument: > Undefined behaviour > > > 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.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 >
_______________________________________________ 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