If you need only a few truly random numbers you might use dice or atmospheric noise. However, if you need many random numbers you will have to use a pseudo random number generator (RNG). R includes support for different RNGs (c.f.
?Random) and a wide variety of distributions (c.f.
?distributions). The underlying methods have been well tested, but faster methods are available. The dqrng package provides fast random number generators with good statistical properties for usage with R. It combines these RNGs with fast distribution functions to sample from uniform, normal or exponential distributions.
At the moment dqrng is not on CRAN, but you can install the current version via drat:
if (!requireNamespace("drat", quietly = TRUE)) install.packages("drat")
Using the provided RNGs from R is deliberately similar to using R’s build-in RNGs:
dqrunif(5, min = 2, max = 10)
##  8.480202 6.582408 8.869840 5.062206 8.828782
dqrnorm(5, mean = 3, sd = 5)
##  -4.0116902 0.9337035 5.6500975 -6.4582090 5.1763009
dqrexp(5, rate = 4)
##  0.4428268 0.1011437 0.3526118 0.3793630 0.6327636
They are quite a bit faster, though, as we can see by comparing 10 million random draws from different distributions:
N <- 1e7
tm <- microbenchmark(
runif = runif(N),
dqrunif = dqrunif(N),
rnorm = rnorm(N),
dqrnorm = dqrnorm(N),
rexp = rexp(N),
dqrexp = dqrexp(N))
r* the default Mersenne-Twister was used, while
dqr* used Xoroshiro128+ in this comparison. For
rnorm the default inversion method was used, while
dqrexp) used the Ziggurat algorithm from Boost.Random with additional tuning.
Both the RNGs and the distribution functions are distributed as C++ header-only library. See the included vignette for possible usage from C++.
Supported Random Number Generators
Support for the following 64 bit RNGs is currently included:
The 64 bit variant of the well-known Mersenne-Twister, which is also used as default. This is a conservative default that allows you to take advantage of the fast distribution functions provided by dqrng while staying close to R’s default RNG (32 bit Mersenne-Twister).
The default 64 bit variant from the PCG family developed by Melissa O’Neill. See http://www.pcg-random.org for more details.
- Xoroshiro128+, Xorshift128+, and Xorshift1024*