[Rd] package load altering RNG state

Martin Maechler
Tue, 07 Feb 2017 14:59:58 -0000

>>>>> Henric Winell <nilsson.henric at gmail.com>
>>>>>     on Tue, 7 Feb 2017 13:37:42 +0100 writes:

    > Hi, On 2017-02-07 13:12, Benjamin Tyner wrote:

    >> Hello
    >>
    >> When loading a package, I'm wondering if it's frowned
    >> upon for the package to alter the state of the random
    >> number generator? I guess not, since the parallel package
    >> does it?

    > Surprisingly it is not frowned upon, but it *is* a
    > nuisance.  I brought it up a couple of years ago

    >
http://r.789695.n4.nabble.com/parallel-package-changes-Random-seed-td4686321.html

    > along with a patch, but was told off...

    >>
    >> > set.seed(6860) > old.seed <- .GlobalEnv$.Random.seed
>
    >> library(parallel) > new.seed <- .GlobalEnv$.Random.seed >
    >> identical(old.seed, new.seed) [1] FALSE
    >>
    >> I ask because, I found myself writing a custom wrapper
    >> around library() to restore the original RNG state, in
    >> order to increase reproducibility.  But now wondering if
    >> others would welcome such a feature to be added to base
    >> R? Either something very general like
    >>
    >> preserveRNGstate(library(parallel))
    >>
    >> or perhaps an specific enhancement to library itself?

    > I would very much welcome a change, but in the light of
    > things it doesn't seem likely.

    > Henric Winell

Sometimes things change ... and not always for the worse.  I've
found a version of your original patch idea which is very
efficient nice (in my eyes) and still leaves
	system.time(loadNamespace("parallel"))
to round to 0, i.e. needing less than 1 ms.

   --> in R-devel svn rev 72136

Martin