Meine Frage ist ein Follow-up von http://rcpp-devel.r-forge.r-project.narkive.com/qJMEsvOK/setting-the-r-random-seed-from-rcpp.Rcpp setzte den RNG-Zustand auf einen früheren Zustand
Ich möchte in der Lage sein, den RNG-Zustand aus C++ in einen früheren Zustand zu setzen. Zum Beispiel möchte ich, dass der folgende Code eine Matrix erzeugt, in der jede Spalte die gleichen Realisierungen von Gamma-Zufallsvariablen enthält.
cppFunction('NumericMatrix rgamma_reset_seed(int n, double shape, double rate){
RNGScope rngscope;
Environment g = Environment::global_env();
Environment::Binding RandomSeed = g[".Random.seed"];
IntegerVector someVariable = RandomSeed;
NumericMatrix results(n, 2);
results(_,0) = rgamma(n, shape, 1/rate);
RandomSeed = someVariable;
results(_,1) = rgamma(n, shape, 1/rate);
return results;
}')
m <- rgamma_reset_seed(1000, 1.2, 0.8)
par(mfrow = c(2, 1))
plot(m[,1])
plot(m[,2])
Aber es scheint nicht zu funktionieren. In R, kann ich das Ergebnis von Linien wie
.Random.seed <- x # reset the state to x
x <- .Random.seed # store the current state
erreichen Ich fehle etwas offensichtlich? Jede Hilfe würde sehr geschätzt werden!
Danke für Ihre Hilfe. Das Problem ist, dass ich dies wiederholt innerhalb von Rcpp-Code tun möchte, also würde ich nicht wissen, welchen Wert ich für den 'set.seed'-Aufruf verwenden soll, ohne" irgendwie "von' .Random.seed' zu lesen. Es scheint einfacher zu sein, meinen Algorithmus in R mit seltenen Aufrufen von Rcpp-Funktionen zu programmieren, so dass ich die '.Random.seed'-Variable innerhalb von R kopieren und wiederherstellen kann. Bin ich richtig? –
Ich weiß es wirklich nicht. Vielleicht möchten Sie eine andere RNG-Engine verwenden? Viele Kompromisse hier. –