这里有一个C ++函数,用于绘制具有零均值和标准偏差为
s
的N
个独立正态分布随机数。// [[Rcpp::depends(RcppArmadillo)]]
#include <RcppArmadillo.h>
using namespace Rcpp;
// [[Rcpp::export]]
List rnorm_cpp(double s, int N){
arma::colvec epsilon = s * arma::randn(N);
return List::create(Named("e") = epsilon);
}
这里有一个(几乎相同的)R版本
rnormR <- function(s, N){
epsilon <- rnorm(N, mean = 0, sd = s)
return(list(e = epsilon))
}
在引用了rnorm_cpp
和rnormR
之后,我运行了以下代码:
set.seed(1234)
fooR <- rnormR(s = 5, N = 10)
set.seed(1234)
barR <- rnormR(s = 5, N = 10)
set.seed(1234)
fooCpp <- rnorm_cpp(s = 5, N = 10)
set.seed(1234)
barCpp <- rnorm_cpp(s = 5, N = 10)
最后,我运行了identical
命令,并得到了以下结果:
> identical(fooR, barR)
[1] TRUE
> identical(barR, fooCpp)
[1] FALSE
> identical(fooCpp, barCpp)
[1] FALSE
我原以为这三个变量的结果都将是TRUE
,但事实并非如此。如何实现:(1)使得多次调用rnorm_cpp
时生成相同的随机数;(2)让rnormR
和rnorm_cpp
产生相同的随机数?