oliver ratmann
2011-Aug-04 18:33 UTC
[Rd] How to seed the R random number generator in C (standalone) with an instance of .Random.seed
hello all, I use the R standalone math library in my own C program, and the default R random number generator can be seeded with set_seed(const unsigned int, const unsigned int). How could I seed the RNG with an instance of .Random.seed ? I would need this or a similar workaround for debugging purposes. More precisely, I use the default R random number generator to sample from various distributions in my own C code SEED<- .Random.seed save(SEED, args, file= "last.call.R") out<- .Call("my.fun", args) and can reproduce segmentation faults etc via load("last.call.R") .Random.seed<- SEED out<- .Call("my.fun", args) In order to use valgrind, I wrote a little C program "debug.my.fun" that reads in 'args' and 'SEED', and then calls "my.fun" (without the SEXP overhead of course). But the seeds are not set accordingly and segmentation faults are not reproducible. More precisely, I need to replace the set_seed line in the following snippet with something else. #include <Rmath.h> int main(int argc,char* argv[]) { const unsigned int SEED1= 12345, SEED2= 67890; set_seed(SEED1, SEED2); ... } Thanks in advance, Oliver [[alternative HTML version deleted]]
Duncan Murdoch
2011-Aug-04 19:46 UTC
[Rd] How to seed the R random number generator in C (standalone) with an instance of .Random.seed
On 04/08/2011 2:33 PM, oliver ratmann wrote:> hello all, > > I use the R standalone math library in my own C program, and the default R > random number generator can be seeded with > > set_seed(const unsigned int, const unsigned int). > > How could I seed the RNG with an instance of .Random.seed ? > > > > I would need this or a similar workaround for debugging purposes. > > More precisely, I use the default R random number generator to sample from > various distributions in my own C code > > SEED<- .Random.seed > save(SEED, args, file= "last.call.R") > out<- .Call("my.fun", args) > > and can reproduce segmentation faults etc via > > load("last.call.R") > .Random.seed<- SEED > out<- .Call("my.fun", args) > > In order to use valgrind, I wrote a little C program "debug.my.fun" that > reads in 'args' and 'SEED', > and then calls "my.fun" (without the SEXP overhead of course). > > But the seeds are not set accordingly and segmentation faults are not > reproducible.I would guess you are failing to call GetRNGstate() (or possibly PutRNGstate()) in your C code, so it never sees (or updates) the .Random.seed value. Duncan Murdoch> More precisely, I need to replace the set_seed line in the following snippet > with something else. > > #include<Rmath.h> > int main(int argc,char* argv[]) > { > const unsigned int SEED1= 12345, SEED2= 67890; > set_seed(SEED1, SEED2); > > ... > > } > > > > > Thanks in advance, > Oliver > > [[alternative HTML version deleted]] > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel