Random Number Generation

Usage

.Random.seed <- c(rng.kind, n1, n2, ...)
save.seed <- .Random.seed

RNGkind(kind=NULL)

Arguments

kind character or NULL. If kind is a character string, set R's RNG to the kind desired, if it's NULL, return the currently used RNG.
rng.kind integer code in 0:k for the above kind.
n1,n2,... integers. See the details for how many are required (which depends on rng.kind).

Description

.Random.seed is an integer vector, containing the random number generator (RNG) state for random number generation in R.

RNGkind is a more friendly interface to query or set the kind of RNG in use.

Details

Currently available RNG kinds

— — to be expanded — —

((Planned additions are "Mersenne-Twister", "Knuth-TAOCP" (from TAOCP, Vol.2, 3rd ed.,1997), "Ecuyer-...", "Eichenauer-..."))

Note: If any of .Random.seed[i] (i>1) is set to 0, it will be substituted with 1 in the next call to a random number generator, such as runif.

Value

.Random.seed is an integer vector whose first element codes the kind of RNG and therefore is in 0:k where {k+1} is the number of available RNGs.
In the underlying C, .Random.seed[-1] is used as unsigned long (32 bits at least); in R, whose integers are C's long, .Random.seed[i] can therefore be negative for i > 1.

RNGkind returns the RNG in use before the call, invisibly if kind is not NULL.

Note

Initially, there is no seed; a new one is created, using ``Randomize''. Hence, student exercises will each have different simulation results, by default.

Author(s)

of RNGkind: Martin Maechler

References

B. A. Wichmann and I. D. Hill (1982). Algorithm AS 183: An Efficient and Portable Pseudo-random Number Generator, Applied Statistics, 31, 188-190; Remarks: 34, 198 and 35, 89.

A. De Matteis and S. Pagnutti (1993). Long-range Correlation Analysis of the Wichmann-Hill Random Number Generator, Statist. Comput., 3, 67-70.

Marsaglia, G. (1997). A random number generator for C. Discussion paper, posting on usenet newsgroup sci.stat.math.

Marsaglia, G. and Zaman, A. (1994). Some portable very-long-period random number generators. Computers in Physics, 8, 117-121.

See Also

runif, rnorm, ....

Examples

runif(1); .Random.seed; runif(1); .Random.seed
## If there is no seed,  a ``random'' new one is created:
rm(.Random.seed); runif(1); .Random.seed

RNGkind("Wich")# (partial string matching on 'kind')
p.WH <- c(30269, 30307, 30323)
a.WH <- c(  171,   172,   170)
next.WHseed <- function(i.seed = .Random.seed[-1]) (a.WH * i.seed) %% p.WH
my.runif1 <- function(i.seed = .Random.seed)
  { ns <- next.WHseed(i.seed[-1]); sum(ns / p.WH) %% 1 }

## This shows how `runif(.)' works for Wichmann-Hill, using only R functions:
rs <- .Random.seed
(WHs <- next.WHseed(rs[-1]))
u <- runif(1)
all(next.WHseed(rs[-1]) == .Random.seed[-1])
u == my.runif1(rs)

## ----
.Random.seed
ok <- RNGkind()
RNGkind("Super")#matches  "Super-Duper"
RNGkind()
.Random.seed # new, corresponding to  Super-Duper

## Reset:
RNGkind(ok)


[Package Contents]