N
これは、平均ゼロと標準偏差で独立した正規偏差を描画する C++ 関数です。s
// [[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
この3つが当たると思っていましたTRUE
。(1) の呼び出しでランダムな描画を複製し、(2)とrnorm_cpp
の呼び出しで同一の描画を取得するにはどうすればよいですか?rnormR
rnorm_cpp