[Rd] Best way to reset random seed when using set.seed() in a function?
Henrik Bengtsson
hb at stat.berkeley.edu
Wed Feb 13 17:57:23 CET 2008
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
More information about the R-devel
mailing list