1

Is there a way to input a parameter (besides the seed) into a user-defined RNG in R? I understand the basics of RNGkind("user") and creating a RNG with RCPP, but I am unsure if I can defined a parameter can be used in this process. For instance, say I would want to create a function, say RNG_parameter(seed=123, multiplier=3) that simply multiplies my initialization table by a number (I wish to do more, but this example will hopefully make it easier). Essentially, this will create my user_unif_init but it will allow multiple parameters to be called. Is this possible to do? Whenever I try to create an exported function in my RCPP, it then says that: 'user_unif_rand' not in load table.

Edited: Example added (standard RNG example from Random.user) I am looking for a way to add a parameter into a function which initializes the table, I am not sure if it can be done with user_unif_init or if I need to find another way to do it. I tried looking at Seeding a user supplied random number generator in R as similar example but RNGkind("user") wouldn't work for me when I added an exported function into the file.

#include <R_ext/Random.h>

static Int32 seed;
static double res;
static int nseed = 2;

double * user_unif_rand()
{
    seed = 69069 * seed + 1;
    res = seed * 2.32830643653869e-10;
    return &res;
}

void  user_unif_init(Int32 seed_in, int multiplier) { 
seed[1]= seed_in; 
seed[2]= seed_in* multiplier;
}
int * user_unif_nseed() { return &nseed; }
int * user_unif_seedloc() { return (int *) &seed; }
Jon McC
  • 11
  • 3
  • 1
    It would be easier to help if you showed your code and provided a [reproducible example](https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) with expected output that can be used for testing. – MrFlick Jun 17 '21 at 19:35
  • 1
    Also consider the alternative of simply coding the interface to your RNG directly, including seeding. My [RcppZiggurat](https://github.com/eddelbuettel/RcppZiggurat) package provides a simple example. – Dirk Eddelbuettel Jun 17 '21 at 19:49

0 Answers0