Skip to content

Restoring .Random.seed

3 messages · Talbot Katz, Brian Ripley

#
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
#
On Thu, 31 May 2007, Talbot Katz wrote:

            
^^^^^^^^^^^^^^^^^^^^^^^^^^
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?
As documented on the help page.

[...]
#
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