My current RCPP program is only 4 times faster than its R byte code compiled equivalent. I am trying to speed up my code and from what I understand using pointers prevents an external function from copying the entire object when executing its methods.   I am having difficulty finding salient examples that use points and NumericVectors. Please tell me how in this same code I could get the functions "get_sum" and "get_var" to point to the NumericVector object "v" rather than copy the whole thing.<br>
<br><blockquote style="margin:0 0 0 40px;border:none;padding:0px">library(inline)<br>library(Rcpp)<br> a=1:1000000<br>Rcpp.var = cxxfunction(signature(input="numeric"), plugin="Rcpp",<br>body="</blockquote>
<blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"> NumericVector v = input; </blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px">
 int n = v.size();</blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"> double v_mean =  get_sum(v,n)/n;</blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"> double v_var = get_var(v,v_mean,n);</blockquote>
<blockquote style="margin:0 0 0 40px;border:none;padding:0px"> return wrap(v_var);<br><br></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px">",includes="<br><br></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px">
<div> double get_var(NumericVector v,double m,int l)</div></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> {double a = 0;</div></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px">
<div>     for (int i = 0; i <l;i++)</div></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div>{a += (v[i]-m)*(v[i]-m);}</div></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px">
<div>return(a/l);</div></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> }</div></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div><br></div></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px">
<div> double get_sum(NumericVector v,int l)</div></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> { double s = 0;</div></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px">
<div>   for (int i = 0; i <l;i++)</div></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div>{s += v[i];}</div></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div>return(s);</div>
</blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> }</div></blockquote></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> ")</div><div><br></div><div> b=system.time(for (i in 1:100)Rcpp.var (a))</div>
<div> c= system.time(for (i in 1:100)var (a))</div></blockquote><div><br><br>Thank you Alon.</div><div><br></div><div>P.S. I am aware that the "get_var" function provides the population variance and not the sample variance.</div>
<div><br></div>