[R] set.seed and for loop

Petr Savicky savicky at praha1.ff.cuni.cz
Thu Jun 9 19:37:23 CEST 2011


On Thu, Jun 09, 2011 at 10:14:48AM -0500, Soyeon Kim wrote:
> Dear All,
> 
> This is hard to describe so I made a simple example.
> set.seed(1001)
> total <- 0
> data <- vector("list", 30)
> for(i in 1:30) {
>   data[[i]] <- runif(50)
> }
> Let's call a data set runif(50).
> While the for loop is running, 100 data sets  are generated.
> I want to restore 23th data set (the data set generated in 23th for
> loop) without the loop.
> I've tried set.seed(1023) runif(50)
> but this is different data from the data set gotten from 23th for loop.
> How can I get 23th data set without the loop?

It is possible to save a bit (not much) over the loop,
since a sequence of calls of runif() creates the numbers
from the same sequence of numbers. So it is possible to
get more numbers in one call not changing the rest of
the sequence.

I mean the following

  set.seed(1001)
  total <- 0
  data <- vector("list", 30)
  for(i in 1:30) {
    data[[i]] <- runif(50)
  }
  set.seed(1001)
  garbage <- runif(22*50)
  recomp <- runif(50)
  identical(data[[23]], recomp)

  [1] TRUE

There are algorithms for jumping ahead in the sequence
without generating all intermediate numbers, but i do
not know about an efficient available implementation.

Petr Savicky.



More information about the R-help mailing list