On Feb 13, 2008 11:07 AM, Paul Gilbert <[EMAIL PROTECTED]> wrote: > I think in general it is a good idea to use on.exit() to reset the > seed if you mess with it. Otherwise you can generate unintended > consequences for other programs. Something like: > old.seed <- setRNG(kind = "default", seed = test.seed, normal.kind = > "default") > on.exit(setRNG(old.seed))
Yes, agree; on.exit() should always be used when you want to cleanup after yourself. Much better. > > (BTW, setRNG is a simple little utility in the setRNG package, to help > set and save some of the other things you need besides the seed, if you > are going to try to reproduce results.) Thanks for this note. This seems much more natural to work with than '.Random.seed'. /Henrik > > Paul > > > 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. > > > > 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 > > > ==================================================================================== > > La version française suit le texte anglais. > > ------------------------------------------------------------------------------------ > > This email may contain privileged and/or confidential information, and the > Bank of > Canada does not waive any related rights. Any distribution, use, or copying > of this > email or the information it contains by other than the intended recipient is > unauthorized. If you received this email in error please delete it > immediately from > your system and notify the sender promptly by email that you have done so. > > ------------------------------------------------------------------------------------ > > Le présent courriel peut contenir de l'information privilégiée ou > confidentielle. > La Banque du Canada ne renonce pas aux droits qui s'y rapportent. Toute > diffusion, > utilisation ou copie de ce courriel ou des renseignements qu'il contient par > une > personne autre que le ou les destinataires désignés est interdite. Si vous > recevez > ce courriel par erreur, veuillez le supprimer immédiatement et envoyer sans > délai à > l'expéditeur un message électronique pour l'aviser que vous avez éliminé de > votre > ordinateur toute copie du courriel reçu. > ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel