RCPP 警告:调用'exp'不明确

Rcpp warning: Call to 'exp' is ambiguous

本文关键字:exp 不明确 警告 RCPP 调用      更新时间:2023-10-16

我正在编写一个Rcpp代码,如下所示:

// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::depends(BH)]]
// [[Rcpp::plugins(cpp11)]]
#include <RcppArmadillo.h>
#include <boost/random.hpp>
#include <boost/random/uniform_real_distribution.hpp>
#include <math.h>
using namespace Rcpp;
using namespace std;
// [[Rcpp::export]]
double ks(const double k, const double alpha, const double  mag, const double M0){
double ksres;
ksres=  k* std::exp ( alpha*(mag-M0) );
return(ksres);
}

但它表明"调用‘exp’是模棱两可的"。我为什么会收到这个消息,我将如何解决它?

当我进入sessionInfo()时:

R version 3.2.4 (2016-03-10)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: OS X 10.12.6 (unknown)
locale:
[1] en_GB.UTF-8/en_GB.UTF-8/en_GB.UTF-8/C/en_GB.UTF-8/en_GB.UTF-8
attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     
other attached packages:
[1] Rcpp_0.12.4
loaded via a namespace (and not attached):
[1] colorspace_1.2-6 scales_0.4.0     plyr_1.8.3       tools_3.2.4       inline_0.3.14    gtable_0.2.0     rstan_2.9.0-3   
[8] gridExtra_2.2.1  ggplot2_2.1.0    grid_3.2.4       munsell_0.4.3    stats4_3.2.4  

我建议OP关闭或删除它。这个问题只是展示了一些允许但不推荐的C++用法:

  • 包含额外的标头:数学标头已由Rcpp引入(由RcppArmadillo引入)
  • 您永远不需要同时cmathmath.h,正如这里所说,您不需要
  • 我们通常建议不要无条件地压平所有名称空间

有了这个,你的代码看起来是这样的(仍然包含对C++11的调用,它没有被使用,但没有伤害):

// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::depends(BH)]]
// [[Rcpp::plugins(cpp11)]]
#include <RcppArmadillo.h>
#include <boost/random.hpp>
#include <boost/random/uniform_real_distribution.hpp>
// [[Rcpp::export]]
double ks(const double k, const double alpha, const double  mag, const double M0){
double ksres;
ksres=  k* std::exp ( alpha*(mag-M0) );
return(ksres);
}
/*** R
ks(1.0, 2.0, 3.0, 4.0)
*/

这在我的盒子上编译时没有任何警告(打开了严格的编译器警告,这里没有显示输出),并且也按预期运行:

R> Rcpp::sourceCpp("/tmp/soQ.cpp")
R> ks(1.0, 2.0, 3.0, 4.0)
[1] 0.135335
R>