在 R 中使用 RcppArmadillo 包与 rowvec 编译错误

Compilation Error using RcppArmadillo package in R with rowvec

我正在尝试编译以下代码。请在下面查看我到目前为止所做的尝试。有什么我想念的吗?任何帮助,将不胜感激。

#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: error: type 'Rcpp::traits::input_parameter::type' (aka 'ConstInputParameter >') does not provide a call operator rcpp_result_gen = Rcpp::wrap(beta(beta, 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);
}