iRNGStream {iterors} | R Documentation |
Iterators returning distant random-number seeds.
Description
The iRNGStream
creates a sequence of random number seeds
that are very "far apart" (2^127 steps) in the overall random
number sequence, so that each can be used to make a parallel,
psudo-independent random iterator. This uses
parallel::nextRNGStream and the "L'Ecuyer-CMRG" generator.
Usage
iRNGStream(seed)
Arguments
seed |
Either a single number to be passed to |
Details
iRNGSubStream creates seeds that are somewhat less far apart (2^76 steps), which might be used as "substream" seeds.
Originally from the itertools
package.
Value
An iteror which produces seed values.
vector to be passed to nextRNGStream
or nextRNGSubStream
.
An iteror which yields successive seed values.
References
For more details on the L'Ecuyer-CMRG generator, see
vignette("parallel", package="parallel")
.
See Also
set.seed
,
nextRNGStream
,
nextRNGSubStream
Examples
global.seed <- .Random.seed
rng.seeds <- iRNGStream(313)
print(nextOr(rng.seeds))
print(nextOr(rng.seeds))
# create three pseudo-independent and
# reproducible random number streams
it1 <- isample(c(0, 1), 1, seed=nextOr(rng.seeds))
it2 <- isample(c(0, 1), 1, seed=nextOr(rng.seeds))
it3 <- isample(c(0, 1), 1, seed=nextOr(rng.seeds))
all(.Random.seed == global.seed)
take(it1, 5, "numeric") # 0 0 0 1 1
take(it2, 5, "numeric") # 0 1 1 1 1
take(it3, 5, "numeric") # 1 1 1 0 0
# none of this affects the global seed
all(global.seed == .Random.seed)
# Compute random numbers in three parallel processes with three
# well-separated seeds. Requires package "foreach"
library(foreach)
foreach(1:3, rseed=iRNGSubStream(1970), .combine='c') %dopar% {
RNGkind("L'Ecuyer-CMRG") # would be better to initialize workers only once
assign('.Random.seed', rseed, pos=.GlobalEnv)
runif(1)
}