错误:无法将'builtin'强制类型为'double'类型的向量

时间:2014-07-12 13:41:20

标签: rcpp armadillo

我一直在努力解决以下错误。我正在使用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);  
}

非常感谢你的帮助。

0 个答案:

没有答案