【问题标题】:Rcpp: "overloaded function with no contextual type information" for R::dbetaRcpp:R::dbeta 的“没有上下文类型信息的重载函数”
【发布时间】:2021-10-02 08:36:22
【问题描述】:

我有包含 Rcpp 包的 C++ 代码。

在一个函数中,我有以下循环:

for(int i=0; i<N; i++){
   double yi = y[i], xi = X_chain[i];
        
   double numerator = R::dbeta( yi, alpha_par, beta, log=false );
   double denumerator = R::dbeta( xi, alpha_par, beta, log=false );
   double alpha = std::min(1.0,(numerator)/(denumerator));
   
   (...)

}

其中 alpha_par 和 beta 是双精度数,它们是 beta 分布的参数。

对于我使用函数 R::dbeta 的两行,我得到错误“没有上下文类型信息的重载函数”。我真的很困惑,因为代码中不同点的 runif 和 rbinom 工作得很好。

【问题讨论】:

    标签: c++ r random overloading rcpp


    【解决方案1】:

    我不确定我是否重现了与您在运行 R::dbeta(0.5, 1.0, 1.0, log = false) 时遇到的相同问题,但我认为您不应该在 C++ 中命名参数。例如。简单地做R::dbeta(0.5, 1.0, 1.0, false) 对我有用。

    【讨论】:

    • 同上,Rcpp::evalCpp("R::dbeta(0.5, 0.5, 0.5, false") 中的一个非常快速和非常天真的检查解决得很好(并得到与 R 中的 dbeta(0,5, 0.5, 0.5) 相同的答案)。
    • 谢谢。是的,我比 C++ 更习惯 R,所以我什至没有想过这件事。取出“log =”部分为我解决了它。非常感谢,它现在也对我有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-16
    • 2012-03-07
    • 2014-04-22
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多