0

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

#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> 

等等...

4

1 回答 1

2

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

filece5923f317b2.cpp:39:34: 错误: type 'Rcpp::traits::input_parameter::type' (aka 'ConstInputParameter >') 不提供调用运算符 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);
}
于 2019-07-24T16:24:18.890 回答