Hi. Suppose I have a function which does some random number generation within. The random number generation inside the function changes the value of .Random.seed in the calling environment. If I want to restore the pre-function call .Random.seed, I can do: save.seed<-.Random.seed result<-myfunction() .Random.seed<-save.seed Is there a way to do the restoration inside the function? I tried putting the "save.seed<-.Random.seed" and ".Random.seed<-save.seed" statements inside the function, but that didn't work. Perhaps there's some clever way to use environment() functions? (I confess I still haven't grasped those very well.) Also, the help section on .Random.seed mentions that some of the random number generators save their state differently. Does each random generation method have a way to restore its state? Thanks! -- TMK -- 212-460-5430 home 917-656-5351 cell
Restoring .Random.seed
3 messages · Talbot Katz, Brian Ripley
On Thu, 31 May 2007, Talbot Katz wrote:
Hi. Suppose I have a function which does some random number generation within. The random number generation inside the function changes the value of .Random.seed in the calling environment. If I want to restore the
^^^^^^^^^^^^^^^^^^^^^^^^^^
That is your misunderstanding. From the help page
The object '.Random.seed' is only looked for in the user's
workspace.
which seems plain enough. So, you can do
save.seed <- get(".Random.seed", .GlobalEnv)
assign(".Randon.seed", save.seed, .GlobalEnv)
to save and restore, *provided* that random numbers have been used in the
session (or .Random.seed will not exist).
However, the help recommends using set.seed(), and why not follow the
advice?
pre-function call .Random.seed, I can do: save.seed<-.Random.seed result<-myfunction() .Random.seed<-save.seed Is there a way to do the restoration inside the function? I tried putting the "save.seed<-.Random.seed" and ".Random.seed<-save.seed" statements inside the function, but that didn't work.
As documented on the help page. [...]
Brian D. Ripley, ripley at stats.ox.ac.uk 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
Thanks! The "get / assign" combination does just what I want, and the warning about the pre-existence of .Random.seed was very helpful. As for set.seed, I have used it to create a replicable state (in fact, I have an option to use it in the function I was writing that prompted my query), but I didn't see any indication that it could be used to restore a state for which you don't necessarily know the seed. I got a couple of good offlist responses, too. One person told me about the "<<-" assignment operator (with an admonishment to use it judiciously). Another responder mentioned the setRNG package, which has a specific methodology for saving the random number generator state. -- TMK -- 212-460-5430 home 917-656-5351 cell
From: Prof Brian Ripley <ripley at stats.ox.ac.uk> To: Talbot Katz <topkatz at msn.com> CC: r-help at stat.math.ethz.ch Subject: Re: [R] Restoring .Random.seed Date: Thu, 31 May 2007 20:57:09 +0100 (BST) On Thu, 31 May 2007, Talbot Katz wrote:
Hi. Suppose I have a function which does some random number generation within. The random number generation inside the function changes the value of .Random.seed in the calling environment. If I want to restore the
^^^^^^^^^^^^^^^^^^^^^^^^^^
That is your misunderstanding. From the help page
The object '.Random.seed' is only looked for in the user's
workspace.
which seems plain enough. So, you can do
save.seed <- get(".Random.seed", .GlobalEnv)
assign(".Randon.seed", save.seed, .GlobalEnv)
to save and restore, *provided* that random numbers have been used in the
session (or .Random.seed will not exist).
However, the help recommends using set.seed(), and why not follow the
advice?
pre-function call .Random.seed, I can do: save.seed<-.Random.seed result<-myfunction() .Random.seed<-save.seed Is there a way to do the restoration inside the function? I tried putting the "save.seed<-.Random.seed" and ".Random.seed<-save.seed" statements inside the function, but that didn't work.
As documented on the help page. [...] -- Brian D. Ripley, ripley at stats.ox.ac.uk 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