Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ rcpp中的调用没有匹配函数_C++_R_Rcpp - Fatal编程技术网

C++ rcpp中的调用没有匹配函数

C++ rcpp中的调用没有匹配函数,c++,r,rcpp,C++,R,Rcpp,在使用Rcpp时,我创建了一个名为rpois_Rcpp的函数,并尝试在下面的genDataList函数中调用它,出现了一个错误,并说: “调用'cpprbinom'时没有匹配函数, 候选函数不可行:第三个参数没有从'arma::vec'(又名'Col')到'Rcpp::NumericVector'(又名'Vector')的已知转换 arma::vec cpprbinom(int n,双大小,数值向量prob) 谁能帮帮我,谢谢 这是我的密码: //create a random matrix X

在使用Rcpp时,我创建了一个名为rpois_Rcpp的函数,并尝试在下面的genDataList函数中调用它,出现了一个错误,并说: “调用'cpprbinom'时没有匹配函数, 候选函数不可行:第三个参数没有从'arma::vec'(又名'Col')到'Rcpp::NumericVector'(又名'Vector')的已知转换 arma::vec cpprbinom(int n,双大小,数值向量prob)

谁能帮帮我,谢谢

这是我的密码:

//create a random matrix X with covariance matrix sigma
// [[Rcpp::export]]
arma::mat mvrnormArma(const int n, arma::vec mu, const int p, const 
double rho) {

  arma::mat sigma(p, p, arma::fill::zeros);

  for (int i = 0; i < sigma.n_rows; ++i) {
    for (int j = 0; j < sigma.n_cols; ++j) {
      sigma(i,j) = pow(rho, abs((i + 1) - (j + 1)));
    }
  }

  int ncols = sigma.n_cols;
  arma::mat Y = arma::randn(n, ncols);


  return arma::repmat(mu, 1, n).t() + Y * arma::chol(sigma);
}

//create a vector sampled from poisson distribution with mean vector 
//lambda
// [[Rcpp::export]]
arma::vec rpois_rcpp( NumericVector &lambda) {
  int n= lambda.length();
  unsigned int lambda_i = 0;
  IntegerVector sim(n);
  for (unsigned int i = 0; i < n; i++) {
    sim[i] = R::rpois(lambda[lambda_i]);
    // update lambda_i to match next realized value with correct mean
    lambda_i++;

  }
  return  as<arma::vec>(sim);
}

//create a vector sampled from binomial distribution with probability 
vector prob
// [[Rcpp::export]]
arma::vec cpprbinom(int n, double size, NumericVector prob) { 
  NumericVector v = no_init(n);
  std::transform( prob.begin(), prob.end(), v.begin(), [=](double p){ 
      return R::rbinom(size, p); }); 
  return as<arma::vec>(v);}




// [[Rcpp::export]]44
List genDataList(int n, arma::vec& mu, int p, double rho,
             arma::vec& beta, const double SNR, const std::string & 
  Test_case) {

  arma::mat U, V, data, normData, Projection;
  arma::vec s, y, means, noise;

  data = mvrnormArma(n, mu, p, rho);
  normData = arma::normalise(data,2,0);
  arma::svd_econ(U,s,V,normData,"right");
  Projection = V * trans(V);
  beta = Projection * beta;


  if(Test_case == "gaussian")
  {
    means=normData * beta;
    y = means + arma::randn(n) * sqrt(arma::var(means) / SNR);}
  else if (Test_case == "poisson")
  {
    means=exp(normData * beta);
    y = rpois_rcpp(means);}
  else
  {
    means=exp(normData * beta)/(1 + exp(normData * beta));
    y = cpprbinom(n,1,means);}




  List ret;
  ret["data"] = data;
  ret["normData"] = normData;
  ret["V"] = V;
  ret["beta"] = beta;
  ret["y"] = y;
  return ret;

  }
//使用协方差矩阵sigma创建一个随机矩阵X
//[[Rcpp::导出]]
arma::mat mvrnorma(常数int n,arma::向量mu,常数int p,常数
双rho){
arma::mat sigma(p,p,arma::fill::零);
对于(int i=0;i
感谢您添加代码。当我尝试编译时,我得到了与您相同的错误,但调用
rpois\u rcpp()的线路也有错误。

对类型“Rcpp::NumericVector&”的引用初始化无效

几乎所有的东西似乎都在
arma
中,除了R绑定和对
R::
命名空间的调用,它使用double、int等。在我看来,似乎最容易做的事情就是将
arma::vec
作为参数:

arma::vec rpois\u rcpp(arma::vec&lambda){
int n=lambda.n_元素;

arma::vec cpprbinom(int n,双大小,arma::vec prob){

你从来没有利用过
lambda
prob
Rcpp::NumericVector
s这一事实。具体来说,你只需要使用它们的
double
s,所以对我来说这似乎是最简单的方法。在这些更改之后,你的代码在我的机器上编译得很好。我没有任何测试用例来确保它们按照你的预期运行,但我不知道gine他们会的。

在StackOverflow,代码必须是文本,并且在问题中。正如@drescherjm所建议的,如果您的问题将代码复制并粘贴为文本,并将其粘贴到问题本身,这将有助于我们帮助您(我们无法很好地从图像中复制并粘贴代码,以便能够自己检查)欢迎来到StackOverflow!看看tag
[rcpp]的现有问题
--您的当前格式不适合我们添加更多内容。An会很有帮助。@duckmayr@Dirk Eddelbuettel@drescherjm非常感谢我刚刚修复了您好Mohan,欢迎来到StackOverflow,我只是问一个问题,您如何应用您的函数?您能在R中共享一个示例数据集和您的函数吗?非常感谢,它在我的计算机上起了作用r、 我通常不知道该用哪一个,数值向量还是arma::vec,这一个真的很有用!