我一直在努力解决以下错误。我正在使用Rcpp Armadillo函数执行MCMC仿真。代码可以检索过去的真实参数。模拟可以进行少量迭代,然后突然出现错误。或者,R会话将因致命错误而终止。我监控存储的数字,它们是现实的。代码工作好几次(作为一个奇迹),但现在它每次都在发生。我想了解一下这个错误背后的原因。如果它与解决问题相关,我可以发布该函数的代码。
Error in as.vector(post_L(r, y)) :
error in evaluating the argument 'x' in selecting a method for function 'as.vector': Error in as.vector(post_L(r,y)) :
cannot coerce type 'builtin' to vector of type 'double'
#include <RcppArmadilloExtensions/sample.h>
// [[Rcpp::depends(RcppArmadillo)]]
using namespace arma;
using namespace Rcpp;
这是对函数的调用:
L <- as.vector(post_L(r,y))
这是功能:
vec post_L(double r, vec y) {
RNGScope scope;
Environment base("package:base");
Function sample = base["sample"];
int n = y.size();
double den_sum;
mat F = Fmatrix(y);
vec L,samp_temp, Prob_L;
L.zeros(n);
for (int i = 0; i<n; ++i)
{
if (y(i)==0) {
L(i) = 0;
}
else {
Prob_L.zeros(y(i));
den_sum = 0;
for(int k=0; k<y(i); ++k)
{
if(F((y(i)-1),k)==0) {
den_sum= den_sum;
}
if(F((y(i)-1),k)!=0) {
den_sum += F((y(i)-1),k)*pow(r,k);
}
}
for (int j=0; j<y(i); ++j)
{
if(F((y(i)-1),j)==0) {
Prob_L(j) = 0;
}
if(F((y(i)-1),j)!=0) {
Prob_L(j) = (F((y(i)-1),j)*pow(r,j))/den_sum;
}
}
samp_temp.zeros(y(i));
for(int z = 0; z<y(i); ++z)
{
samp_temp(z) = (z+1);
}
L(i) = Rcpp::RcppArmadillo::sample(samp_temp, 1, F, Prob_L);
}
}
return(L);
}
非常感谢你的帮助。