我有一个关于通过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'不在范围内。任何帮助表示赞赏。
答案 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
,以确保它在全局环境中可用,因此可以在G
到R> 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}}