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