The dqrng package provides fast random number generators (RNG) with good statistical properties for usage with R. It combines these RNGs with fast distribution functions to sample from uniform, normal or exponential distributions. Both the RNGs and the distribution functions are distributed as C++ header-only library.
The currently released version is available from CRAN via
install.packages("dqrng")
Intermediate releases can also be obtained via drat:
if (!requireNamespace("drat", quietly = TRUE)) install.packages("drat")
drat::addRepo("daqana")
install.packages("dqrng")
Using the provided RNGs from R is deliberately similar to using R’s build-in RNGs:
library(dqrng)
dqset.seed(42)
dqrunif(5, min = 2, max = 10)
#> [1] 9.211802 2.616041 6.236331 4.588535 5.764814
dqrexp(5, rate = 4)
#> [1] 0.35118613 0.17656197 0.06844976 0.16984095 0.10096744
They are quite a bit faster, though:
N <- 1e7
system.time(rnorm(N))
#> user system elapsed
#> 0.744 0.024 0.769
system.time(dqrnorm(N))
#> user system elapsed
#> 0.072 0.020 0.093
In addition they provide support for multiple streams for parallel usage:
dqset.seed(42, 1)
u1 <- dqrunif(N)
dqset.seed(42, 2)
u2 <- dqrunif(N)
cor(u1, u2)
#> [1] -0.0005787967
All feedback (bug reports, security issues, feature requests, …) should be provided as issues.