RNGkind allows user-coded uniform and
  normal random number generators to be supplied.  The details are given
  here.
user_unif_rand, which takes no arguments and returns a
  pointer to a double. The example below will show the general
  pattern.  Optionally, the user can supply the entry point user_unif_init,
  which is called with an unsigned int argument when
  RNGkind (or set.seed) is called, and is intended
  to be used to initialize the user's RNG code.  The argument is intended
  to be used to set the seeds; it is the seed argument to
  set.seed or an essentially random seed if RNGkind
  is called.
  If only these functions are supplied, no information about the
  generator's state is recorded in .Random.seed.  Optionally,
  functions user_unif_nseed and user_unif_seedloc can be
  supplied which are called with no arguments and should return pointers
  to the number of seeds and to an integer (specifically, Int32)
  array of seeds.  Calls to GetRNGstate and PutRNGstate
  will then copy this array to and from .Random.seed.
  A user-specified normal RNG is specified by a single entry point
  user_norm_rand, which takes no arguments and returns a
  pointer to a double.