[Rcpp-devel] repeatable random numbers
Silkworth,David J.
SILKWODJ at airproducts.com
Thu Sep 1 21:45:07 CEST 2011
RNGScope() mearly saves the state of the RNG for the R environment,
returning it upon class destruction at end of your (compiled) Rcpp
function.
You can pass a seed to your Rcpp function as an argument and, after
preserving state with RNGScope(), you can set the seed within the Rcpp
function for this repeatable capability. I did this in an example that
I listed here a couple of months ago using the environment facility to
call R's set.seed command.
src <- '
Rcpp::RNGScope Scope;
Environment base("package:base");
Function SetSeed = base["set.seed"];
int NumRands = 5;
int NumTrials = 3;
Rcpp::NumericVector RandCol(NumRands);
Rcpp::NumericMatrix RandVals(NumRands, NumTrials*2);
SetSeed(Named("seed",20) );
RandCol=rnorm(NumRands,2,1);
int j=3;
for(int i=0; i<NumRands; i++) {
RandVals(i,j) = RandCol(i);
}
return RandVals;
'
fun <- cxxfunction(signature(),
src, plugin = "Rcpp")
test_fun<-fun()
>Message: 6
>Date: Thu, 1 Sep 2011 12:06:53 -0500
>From: Zhongyi Yuan <zhongyi-yuan at uiowa.edu>
>Subject: [Rcpp-devel] repeatable random numbers
>Hello everyone,
>I am conducting some numerical studies that I want to be repeatable. In
>other words, I want others who run my code to get exactly the same
result as
>I get.
>This can be easily done in pure R.
>But since I want the random number generation in Cpp, I think I need a
seed
>that can be retrieved even after re-compilation. Can this done with
>RNGScope?
>Thanks for your help.
>Best,
>Zhongyi
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20110901/4a55d1c0/attachment-0001.htm>
More information about the Rcpp-devel
mailing list