Just a follow up on "copying": If you copying": If you do #include <Rcpp.h> using namespace Rcpp;
// [[Rcpp::export]] void absC(NumericVector & x) { if (x[0] < 0) x = -x; } /*** R y <- -1L absC(y) y */ you'll get > y <- -1L > absC(y) > y [1] -1 and that is because an IntegerVector is provided but a NumericVector is expected; hence a copying takes place. Regards Søren |-----Original Message----- |From: rcpp-devel-boun...@lists.r-forge.r-project.org [mailto:rcpp-devel- |boun...@lists.r-forge.r-project.org] On Behalf Of Dirk Eddelbuettel |Sent: 28. juli 2015 20:46 |To: Rguy |Cc: rcpp-devel@lists.r-forge.r-project.org |Subject: Re: [Rcpp-devel] Call by reference | | |On 28 July 2015 at 17:53, Rguy wrote: || I attempted to implement the call by reference example on page 200 of || Seamless R and C++, as follows: || || #include <Rcpp.h> || using namespace Rcpp; || || // [[Rcpp::export]] || void absC(double & x) { || if (x < 0) x = -x; || } || || /*** R || x = -1 || absC(x) || x || */ || || Unfortunately, x remains equal to -1. || Platforms: Windows 7, "R version 3.1.3 Patched (2015-03-16 r68103)". || Please advise. | |An (atomic) double does not exist in R, so you are _always_ forcing a |copy, which works against your intent here. | |Try replacing double with Rcpp::NumericVector. | |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 _______________________________________________ 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