据我了解from the doc,可以评估tgamma
C ++库的boost
函数的复数。
我试图在Rcpp
中使用它。这是我的代码:
// [[Rcpp::depends(BH)]]
#include <Rcpp.h>
#include <boost/math/special_functions/gamma.hpp>
// [[Rcpp::export]]
std::complex<double> gamma_boost(std::complex<double> z) {
std::complex<double> result = tgamma(z);
return result;
}
此代码无法编译。我收到错误:
cannot convert 'std::complex<double>' to 'double' for argument '1' to 'double tgamma(double)'
答案 0 :(得分:2)
您在这里可能有错tgamma()
,请尝试boost::math::tgamma(...)
。和/或您可能需要在std::complex
上模板。
我通常的做法是先在命令行上运行一些东西,然后通过Rcpp将这些代码附加到R.
答案 1 :(得分:2)
基本上,你正在调用错误的函数。
您没有指定命名空间,因此由于z
,ADL会从标准库中找到std::tgamma
。
std::tgamma
不会将std::complex
作为参数,因此会出现编译错误。您想要boost::math::tgamma
。
但 Boost的tgamma
也不支持std::complex
类型,因此您需要使用其他库或自行实施。