に分布関数を使用する方法私はN(0,1)分布のためのメトロポリス・ヘイスティングス法を書いている:Rcpp - どのようにC++コード
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
NumericVector metropolis(int R, double b, double x0){
NumericVector y(R);
y(1) = x0;
for(int i=1; i<R; ++i){
y(i) = y(i-1);
double xs = y(i)+runif(1, -b,b)[0];
double a = dnorm(xs, 0, 1)[0]/dnorm(y(i), 0, 1)[0];
NumericVector A(2);
A(0) = 1;
A(1) = a;
double random = runif(1)[0];
if(random <= min(A)){
y[i] = xs;
}
}
return y;
}
が、私は機能をコンパイルしようとするたびに、このエラーが発生します。
12行目: 'をdnorm4'
への呼び出しに該当する機能は、私は
のように、dnormを使用して些細な関数を記述しようとしませんNumericVector den(NumericVector y, double a, double b){
NumericVector x = dnorm(y,a,b);
return x;
}
となります。メトロポリスコードでこのタイプのエラーが発生した理由を誰かが知っていますか? RのようなC++コードで密度関数を使用するにはいくつかの方法がありますか?
Rcppギャラリーには、SOや他の場所に適切な例があります。 –