Hi - thanks. Sure, my description was not very good. I suppose its a nested 
sample - of a sample - with an operation (+) inbetween....(and a function 
call...).

Suggestion was useful though, thanks. So..I can shave off 5 seconds (from a 
total of 20-ish) by chucking away
floor, amending runif and just making sure I am not introducing anything 
'biased' via the convert.

I know that R 'converts' floating values for index positions...but (for some 
reason) I did not think to check that in works like that for NumericVector..too.
...I'll take the 5 seconds regardless! :-) ta, chris.

________________________________________
From: icos.atr...@gmail.com [icos.atr...@gmail.com] on behalf of Christian 
Gunning [x...@unm.edu]
Sent: 18 August 2011 09:14
To: rcpp-de...@r-forge.wu-wien.ac.at
Cc: Wray, Christopher
Subject: R.e. Speed gain assistance (Wray, Christopher)

There's a number of things going on in your example.  Are you sure
that sample() is the bottleneck?  You might want to try breaking this
into smaller pieces and benchmarking each with rbenchmark.

On Wed, Aug 17, 2011 at 3:00 AM,
<rcpp-devel-requ...@r-forge.wu-wien.ac.at> wrote:
>
> I have thought (but not tried) importing R's sample function...but I suspect 
> this may be a totally rude idea.

Pulling R functions into a C++ function isn't hard, but there's
overhead -- if i recall correctly, it's appreciably slower than the
API.

Take a look at this (unweighted) sample() function.  It's giving R a
run for it's money, and is pretty fast even for very large n, and it
looks statistically correct (not sure if I'm glossing over ugly,
machine-specific details of double->int conversion here). Does this
shed any light on your question?

best,
Christian

library(inline); library(Rcpp);
src1<-'
NumericVector xx(x);
int xx_sz = xx.size()-1; // index of last xx
int nn=as<int>(n);
NumericVector ret(nn);
RNGScope scope;
for (int i=0; i<nn; i++) {
    ret[i] = xx[Rf_runif(0.0,xx_sz)];
};
return(ret);
'

mysample<-cxxfunction( signature(x='numeric', n="numeric"), src1, plugin='Rcpp')

system.time(result <- mysample(1:50, 1e7))
system.time(resultR <- sample(1:50, 1e7, replace=T))


--
A man, a plan, a cat, a ham, a yak, a yam, a hat, a canal – Panama!
_______________________________________________
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

Reply via email to