Wonderful! Thanks again! On Mon, Mar 20, 2017 at 12:13 PM, Dirk Eddelbuettel <e...@debian.org> wrote:
> > Evan, > > On 20 March 2017 at 12:02, Evan Cortens wrote: > | Thanks very much! Apologies for posting about something that has been > covered > | elsewhere, I did search, but clearly not well enough. (Indeed, I see, > this is > | almost exactly the same issue: https://stackoverflow. > com/questions/11300048/ > | rcpp-pass-by-reference-vs-by-value ) > > No worries. I think this should be in the R FAQ. I need to add something... > > | On (3), apologies for being unclear, of course casting from int to > double isn't > | an issue. I meant to say it could be an issue the other way around, > namely, > | double to int. If you instead pass, for example, c(1.1, 2.2, 3.3, 4.4, > 5.5, > | 6.6) to my example function, it'll silently cast that to an integer > vector c(1, > | 2, 3, 4, 5, 6) (i.e., truncating). That said, this isn't really > unexpected > | behaviour, rather exactly what you'd expect if you did {double x = 1.1; > int y = > | (int) x;} in C. I'll pass on writing my own compiler, at least for now :) > > I know. I was just being snarky -- some of these things we cannot test for > as > the compiler gets in the way. As in should, because most of the time it > does > know better. > > | Finally, just to close the loop on this and to make sure I understand... > if I > | don't want to modify the original vector, I should do this, yes? > | > | cppFunction('IntegerVector test_int_vec(IntegerVector x) { > | IntegerVector y = clone(x); > | for ( R_xlen_t i = 0; i < x.size(); i++ ) > | y[i] = y[i] * 2; > | return y; > | }') > > Yes, pretty much. And the simpler code here works too: > > R> cppFunction("IntegerVector test_int_vec(IntegerVector x) { return 2*x; > }") > R> vec <- c(1L, 2L, 3L) > R> test_int_vec(vec) > [1] 2 4 6 > R> vec > [1] 1 2 3 > R> > > 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