从Rcpp调用R函数

时间:2015-04-06 00:16:23

标签: r rcpp

我有一个关于通过Rcpp在R中进行C ++集成的非常基本的问题。假设我想在C ++中实现一个像这样的简单函数:

inte = function(x, y, a, b){
   model = approxfun(x, y)
   return(integrate(model, a, b)$value)
}

因此,一个非常基本的方法是调用R'功能'整合'尽可能多:

// [[Rcpp::export]]
double intecxx(Function inte, NumericVector x, NumericVector y,
  double a, double b) {  
    NumericVector res;
    res = inte(x, y, a, b);
    return res[0];
}

但是,我需要使用这个' intecxx'在我的C ++代码的许多其他部分,所以从其他地方调用它会导致' inte'不在范围内。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)

如果您愿意通过将对intecxx内部的inte的调用硬编码来修改#include <Rcpp.h> /*** R inte = function(x, y, a, b){ model = approxfun(x, y) return(integrate(model, a, b)$value) } .x <- 1:10 set.seed(123) .y <- rnorm(10) */ // [[Rcpp::export]] double intecxx(Rcpp::NumericVector x, Rcpp::NumericVector y, double a, double b) { Rcpp::NumericVector res; Rcpp::Environment G = Rcpp::Environment::global_env(); Rcpp::Function inte = G["inte"]; res = inte(x, y, a, b); return res[0]; } ,而不是尝试将其作为参数传递,则可以使用此方法:

inte

我在与intecxx相同的源文件中定义了intecxx,以确保它在全局环境中可用,因此可以在GR> inte(.x, .y, 1, 10) [1] 1.249325 R> intecxx(.x, .y, 1, 10) [1] 1.249325 R> all.equal(inte(.x, .y, 1, 10),intecxx(.x, .y, 1, 10)) [1] TRUE 内进行调用。

{{1}}