[Rcpp-devel] function modifying it self its argument

Jeffrey Pollock jeffpollock9 at gmail.com
Thu Feb 26 16:30:58 CET 2015


Perhaps use the clone() function?

library(Rcpp)

cppFunction("
NumericVector par_CMAtR(NumericVector vec_CMA) {
    NumericVector out = clone(vec_CMA);
    out[5] = exp(out[5]);
    return out;
}
")

vec_C <- rep(1, 6)
par_CMAtR(vec_C)
print(vec_C)

On Thu, Feb 26, 2015 at 3:16 PM, Pierre GLOAGUEN <Pierre.Gloaguen at ifremer.fr
> wrote:

>
> Hello everybody,
>
> I have a very simple example
> I have a vector vec_CMA which length is a multiple of 6.
> I want to get the exact same vector, except the last element which is the
> exponential of the last element of vec_CMA
> The code is the following
>
> //myfun.cpp
> #include <Rcpp.h>
> using namespace Rcpp;
>
> // [[Rcpp::export]]
> NumericVector par_CMAtR(NumericVector vec_CMA){
>   int K = (vec_CMA.size())/6;
>   NumericVector out(6*K);
>   out = vec_CMA;
>   out[6*K-1] = exp(vec_CMA[6*K-1]);
>   return out;
> }
>
> I apply the function with the R code
> sourceCpp("myfun.cpp")
> vec_C <- rep(1,6)
> par_CMAtR(vec_C)
> [1] 1 1 1 1 1 2.718282
>
> 8
>
> works fine. Except the vec_C is modified too!
> vec_C
> [1] 1 1 1 1 1 2.718282
>
> It's the first time I have this kind of problem. What is wrong in my code?
> Thanks for your help,
>
> Pierre Gloaguen
>
>
> _______________________________________________
> 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/20150226/7d2c53f4/attachment.html>


More information about the Rcpp-devel mailing list