在 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);
}
我正在尝试编译以下代码。请在下面查看我到目前为止所做的尝试。有什么我想念的吗?任何帮助,将不胜感激。
#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);
}