La mia domanda è un follow-up di http://rcpp-devel.r-forge.r-project.narkive.com/qJMEsvOK/setting-the-r-random-seed-from-rcpp.Rcpp imposta lo stato RNG su uno stato precedente
Voglio essere in grado di impostare lo stato RNG in uno stato precedente da C++. Ad esempio, desidero il seguente codice per produrre una matrice in cui ogni colonna contiene le stesse realizzazioni di variabili casuali Gamma.
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])
Ma non sembra funzionare. In R, posso ottenere il risultato con linee come
.Random.seed <- x # reset the state to x
x <- .Random.seed # store the current state
Mi manca qualcosa di ovvio? Qualsiasi aiuto sarebbe molto apprezzato!
Grazie per il vostro aiuto. Il problema è che voglio farlo ripetutamente dal codice Rcpp, quindi non saprei quale valore usare nella chiamata 'set.seed' senza" leggerlo "in qualche modo da' .Random.seed'. Sembra che sarebbe più facile codificare il mio algoritmo in R con chiamate raramente a funzioni Rcpp, in modo da poter copiare e ripristinare la variabile '.Random.seed' dall'interno R. Sono corretto? –
Davvero non lo so. Forse vuoi prendere in considerazione l'utilizzo di un motore RNG diverso? Un sacco di compromessi qui. –