Le 03/10/10 23:29, Dirk Eddelbuettel a écrit :

Colin,

Just as one last comment, the issue at hand is described in Section 6.3 of
Writing R Extensions:

    6.3 Random number generation
    ============================

    The interface to R's internal random number generation routines is

         double unif_rand();
         double norm_rand();
         double exp_rand();

    giving one uniform, normal or exponential pseudo-random variate.
    However, before these are used, the user must call

         GetRNGstate();

    and after all the required variates have been generated, call

         PutRNGstate();

    These essentially read in (or create) `.Random.seed' and write it out
    after use.

    [...]

We had not made that sufficiently clear. What you encountered with rgamma was
an internal algorithm using a rejection sampleing scheme calling unif_rand()
and exp_rand() ... but creating an infinite loop at it would always end up
with the same draws.

I amended the 'Rcpp-sugar' vignette as well as the header files to point
users to this Section 6.3 to make sure GetRNGstate() and PutRNGstate() are
used.

Cheers,  Dirk

In addition, we have the RNGScope class, whose constructor calls GetRNGstate and destruvctor calls PutRNGstate, so that you can do :

fx <- cxxfunction( , '
        RNGScope scope ;
        NumericVector x = rgamma( 10, 1, 1 ) ;
        return x ;
', plugin = "Rcpp" )

fx()

Romain


--
Romain Francois
Professional R Enthusiast
+33(0) 6 28 91 30 30
http://romainfrancois.blog.free.fr
|- http://bit.ly/cCmbgg : Rcpp 0.8.6
|- http://bit.ly/bzoWrs : Rcpp svn revision 2000
`- http://bit.ly/b8VNE2 : Rcpp at LondonR, oct 5th


_______________________________________________
Rcpp-devel mailing list
[email protected]
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel

Reply via email to