使用rowvec在R中使用RcppArmadillo包时出现编译错误



我正在尝试编译以下代码。请看下面我已经尝试了什么。我缺少什么吗。如有任何帮助,我们将不胜感激。

#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
using namespace Rcpp;
// [[Rcpp::export]]
List beta(const arma::rowvec beta,
const int n, 
const int L1,
const int p,
const arma::mat YWeight1,
const arma::mat z){
double S0=0;
for(int i = 0;i < n; ++i){
arma::rowvec zr = z.rows(i,i);
S0 +=  exp(arma::as_scalar(beta*zr.t()));
}
List res;
res["1"] = S0;
return(res);
}

我无法复制错误,但这就是我得到的。

no match for call to '(Rcpp::traits::input_parameter<const arma::Row<double> 

等等…

有一个rowvec转换器。这里的问题是:

filece5923f317b2.cpp:39:34:错误:类型"Rcpp::traits::input_parameter::type"(又名"ConstInputParameter")不提供调用运算符rcpp_result_gen=rcpp::wrap(β(β,n,L1,p,YWeight1,z));

很少有想法:1。已经存在一个名为beta()和2的函数。有一个名为beta的变量可能会对Rcpp属性造成严重破坏。

解决方案:

  • 移除using namespace Rcpp;
  • 将函数从beta()重命名为beta_estimator()
  • 指定Rcpp::List的长度
  • 通过数字索引而不是字符串进行访问

已更正的代码:

#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::export]]
Rcpp::List beta_estimator( // renamed function
const arma::rowvec beta,
const int n, 
const int L1,
const int p,
const arma::mat YWeight1,
const arma::mat z){
double S0 = 0;
for(int i = 0;i < n; ++i){
arma::rowvec zr = z.rows(i,i);
S0 += exp(arma::as_scalar(beta*zr.t()));
}
// Specify list length
Rcpp::List res(1);
res[0] = S0;
return(res);
}

相关内容

最新更新