Activates the dqrng pcg64 RNG backend for the duration of the calling
frame, then resets it when .local_envir exits. While active, base R's
runif(), rnorm(), rbinom(), rexp(), rgamma(), rpois(),
sample.int(), and sample() (and therefore dplyr::slice_sample() and
ssdtools::ssd_r*()) draw from dqrng's pcg64, seeded via
dqrng::dqset.seed(). pcg64 is forced explicitly because it accepts the
length-2 stream argument the per-task primer design relies on; dqrng's own
default (Xoroshiro128++) does not.
Usage
local_dqrng_backend(.local_envir = parent.frame())Value
Invisibly returns TRUE if this call activated the backend (the
outermost scope) or FALSE if the backend was already active and the call
was a no-op.
Details
Registering the backend is a process-global side effect that also advances
base R's .Random.seed. local_dqrng_backend() follows the withr
convention (compare withr::local_seed()): it pairs activation with
deferred reset so the backend is always restored, including on error.
The helper is reentrant. dqrng::register_methods() /
dqrng::restore_methods() keep a single global save-slot, so a nested
reset would tear the backend down for the still-open outer scope. To avoid
this, a local_dqrng_backend() call made while the backend is already
active is a no-op: it does not re-activate the backend and schedules no
further reset. Only the outermost call activates the backend on entry and
resets it on exit, so the RNG stream is identical whether or not a nested
call occurs.
Examples
local_dqrng_backend()
dqrng::dqset.seed(42, stream = c(1L, 2L))
runif(3)
#> [1] 0.4411014 0.1730826 0.1833968