C++ 如何将函数作为参数传入Rcpp/C++;?
我正在尝试编写一个函数,它可以将函数作为它在Rcpp中的参数。我在R中编写了一个示例函数,展示了我的目标功能:C++ 如何将函数作为参数传入Rcpp/C++;?,c++,r,rcpp,C++,R,Rcpp,我正在尝试编写一个函数,它可以将函数作为它在Rcpp中的参数。我在R中编写了一个示例函数,展示了我的目标功能: simulate_and_evaluate <- function(simulate, evaluate) { y <- simulate(1) eval <- evaluate(y) return(eval) } simulate_fun <- function(n) rnorm(n, 0, 1) evaluate_fun <- funct
simulate_and_evaluate <- function(simulate, evaluate) {
y <- simulate(1)
eval <- evaluate(y)
return(eval)
}
simulate_fun <- function(n) rnorm(n, 0, 1)
evaluate_fun <- function(x) dnorm(x, 0, 1)
simulate_and_evaluate(simulate = simulate_fun,
evaluate = evaluate_fun)
RCPP旨在实现R和C++对象的无缝接口。由于函数是第一类R对象,内部表示为a
SEXP
类型,因此我们当然也可以随Rcpp一起提供它们。有许多例子
因此,这里我们只需将您的函数重写为C++函数:
Rcpp::cppFunction("double simAndEval(Function sim, Function eval) {
double y = as<double>(sim(1));
double ev = as<double>(eval(y));
return(ev);
}")
但是,正如MrFlick警告过的,这将不会运行得更快,因为我们没有添加我们只从C++调用的实际函数的编译执行,而不是R.< /P>
这个话题以前已经讨论过了。请使用字符串
[rcpp]函数搜索StackOverflow,以获得一些有意义的点击。您在这里使用rcpp有什么原因吗?是为了加速代码吗?因为如果你试图在C++的土地上调用一个标准的R函数,你可能不会得到很大的提升。如果运行高效的C++代码,Rcpp将创建工作。但这似乎不是您在这里要做的。这里有一个关于这方面的指南。另请参阅RcppDE包,其中有一个将已编译的用户提供的函数传递给优化器的工作示例。@MrFlick在我希望实现的实际函数中,我使用这些函数来模拟和评估密度,但也可以使用这些结果执行其他操作。我希望通过能够将实现这一点的一些R代码转换为Rcpp代码,这将提高我的性能。我明白,只需调用C++中的基本R函数就不会提高性能,但是希望函数会与这些函数的结果相关联,这样会提高效率。
R> set.seed(123)
R> simulate_and_evaluate(simulate = simulate_fun,
+ evaluate = evaluate_fun)
[1] 0.341
R> set.seed(123) # reset RNG
R> simAndEval(simulate_fun, evaluate_fun)
[1] 0.341
R>