Hi,

this is related to a question just raised on Bioconductor where one
function sets the random seed internally but never resets it, which
results in enforced down streams random samples being deterministic.

What is the best way to reset the random seed when you use set.seed()
within a function?  Is it still to re-assign '.Random.seed' in the
global environment as following example illustrates?  I'm not too kind
of having function modifying the global environment, if not really
necessary.

foo <- function(n) {
  # Pop random seed
  if (!exists(".Random.seed", mode="numeric"))
    sample(NA);
  oldSeed <- .Random.seed;

  # Fixed seed to get reproducible samples here
  set.seed(0xbeef);
  x <- sample(5);

  # Proof of concept: 'x' should be the same all the time
  stopifnot(identical( x, as.integer(c(4,2,5,1,3)) ));

  # Push random seed to old state
  assign(".Random.seed", oldSeed, envir=globalenv())

  # Continue as nothing happened
  sample(n);
}

> foo(5)
[1] 4 2 3 5 1
> foo(5)
[1] 4 2 3 1 5
> foo(5)
[1] 5 3 1 4 2
> foo(5)
[1] 5 3 2 4 1
> foo(5)

Is this the way to do it?

Thanks

Henrik

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to