我正在写一个大都市,黑斯廷斯算法为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;
}
它的工作原理。有人知道我为什么在Metropolis代码中出现这种类型的错误吗? 有没有其他的方式来使用像R中的C++代码中的密度函数?
在SO和其他地方的Rcpp图库上有_dozens_适合的例子。 –