Установите семя с помощью Rmath.h для сравнения с R

У меня есть код C, использующий генерацию случайных чисел через Rmath.h, который я хочу сравнить с кодом C, вызываемым через R.

Приведенный ниже код c загружается с использованием R CMD SHLIB, затем в R с dyn.load() и вызывается с .C("ranNorm",as.double(0),as.double(1),as.double(1))

#include <R.h>
#include <Rmath.h>

void ranNorm(double *mean, double *sd, double *x){
double mean = mean[0];
double sd = sd[0];

GetRNGstate();
x[0] = rnorm(mean, sd);
PutRNGstate();
}

И я могу установить семя в R с помощью set.seed (). Однако я хочу сравнить это со следующим кодом c:

#define MATHLIB_STANDALONE
#include <Rmath.h>

int main(void){ 
double z;

z = rnorm(0.0,1.0);
printf("%f \n", z); 

return 0;
}

Которая компилируется и запускается с использованием -lRmath

Однако я не уверен, как установить начальное число с помощью этого кода, чтобы обеспечить тот же результат, что и в предыдущем коде. Большое спасибо!


person Chelsea Lofland    schedule 11.04.2015    source источник


Ответы (1)


Благодаря Чарльзу Гейеру из UMN эта проблема решена! Ключ в том, чтобы заставить R соответствовать C, а не наоборот, как я пытался.

В C вы используете set_seed(111,222), затем в R запускаете команды

RNGkind("Marsaglia-Multicarry")
.Random.seed<-c(401L,111L,222L)

Вуаля! Соответствие кода R и C.

person Chelsea Lofland    schedule 17.04.2015
comment
Какова функция 401L в этом вызове? - person BeeOnRope; 13.04.2021