On Wed, 13 Feb 2008, Henrik Bengtsson wrote: > 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.
It is necessary. Of course, any use of random numbers modifies this variable in the global environment, so many, many functions already do. There is a write-up in 'R Internals' of what is permissible in modifying the base and global environments. > 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 > -- Brian D. Ripley, [EMAIL PROTECTED] Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595 ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel