【发布时间】:2013-12-26 18:42:33
【问题描述】:
我正在尝试从 C++ 函数中的 cubature 包中调用 C 例程来执行多维集成。
我试图重现的基本 R 示例是
library(cubature)
integrand <- function(x) sin(x)
adaptIntegrate(integrand, 0, pi)
我可以在this recipe from the gallery 之后从 Rcpp 调用这个 R 函数,但是在从 c/c++ 到 R 来回切换时会有一些性能损失。直接从 C++ 调用 C 函数似乎更明智。
C 例程 adapt_integrate 是从 cubature 导出的
// R_RegisterCCallable("cubature", "adapt_integrate", (DL_FUNC) adapt_integrate);
但是,我不明白如何从 c++ 调用它。这是我的蹩脚尝试,
sourceCpp(code = '
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
double integrand(double x){
return(sin(x));
}
// [[Rcpp::depends(cubature)]]
// [[Rcpp::export]]
Rcpp::List integratecpp(double llim, double ulim)
{
Rcpp::Function p_cubature = R_GetCCallable("cubature", "adapt_integrate");
Rcpp::List result = p_cubature(integrand, llim, ulim);
return(result);
}
'
)
integratecpp(0, pi)
编译失败;显然,我正在做一些非常愚蠢的事情,并且错过了一些将R_GetCCallable 的输出转换为Rcpp::Function 的重要步骤(或直接调用它?)。我已经阅读了几篇有关函数指针的相关文章,但还没有看到使用外部 C 函数的示例。
【问题讨论】: