【问题标题】:Set seed using Rmath.h to compare to R使用 Rmath.h 设置种子以与 R 进行比较
【发布时间】:2015-06-17 12:19:58
【问题描述】:

我有通过 Rmath.h 使用随机数生成的 C 代码,我想与通过 R 调用的 C 代码进行比较。

下面的 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();
}

我可以使用 set.seed() 在 R 中设置种子。但是我想将此与以下 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编译和运行

但是我不确定如何使用此代码设置种子以确保与之前代码中的结果相同。非常感谢!

【问题讨论】:

    标签: c r random-seed


    【解决方案1】:

    感谢 UMN 的 Charles Geyer 解决了这个问题!关键是让 R 匹配 C,而不是像我尝试的那样相反。

    在 C 中,您使用 set_seed(111,222),然后在 R 中运行命令

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

    瞧!匹配 R 和 C 代码。

    【讨论】:

    • 401L 在该调用中的作用是什么?
    猜你喜欢
    • 2017-01-28
    • 2013-01-01
    • 2013-08-13
    • 2021-08-11
    • 2014-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-11
    相关资源
    最近更新 更多