如何在Rcpp / C ++中将函数作为参数传递?

用户2147482565

我正在尝试编写一个可以在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 <- function(x) dnorm(x, 0, 1)

simulate_and_evaluate(simulate = simulate_fun,
                      evaluate = evaluate_fun)

在此函数中simulate_and_evaluate,它接受两个都是函数的参数,一个参数模拟一个数字,而一个参数使用此模拟数字对一个函数求值。因此,例如,我们可以从标准法线模拟一个值,然后评估该点的标准法线的密度。有人知道Rcpp是否有办法吗?

德克·埃德比布特尔

Rcpp旨在实现R和C ++对象的无缝接口。由于函数是内部表示为a类型的一级R对象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);
}")

然后我们可以将RNG设置为相同的值,运行R函数和此C ++函数并获得相同的值太棒了

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> 

但是正如@MrFlick警告您的那样,这不会更快地运行,因为我们没有添加实际函数的编译执行,而只是从C ++而不是R调用它们。

之前已经讨论过该主题。请搜索StackOverflow,也许使用字符串[rcpp] Function来获得一些有意义的点击。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在C函数中将宏作为参数传递?

来自分类Dev

我如何在C ++中将函数作为参数传递

来自分类Dev

如何在C ++中将函数作为参数传递?

来自分类Dev

如何在C#中将对STATIC方法的引用作为函数参数传递?

来自分类Dev

如何在C ++中将多个对象作为参数传递给函数

来自分类Dev

如何在C#中将对STATIC方法的引用作为函数参数传递?

来自分类Dev

如何在C ++中将数组元素作为参数传递给函数?

来自分类Dev

如何在C ++中将类(不是对象)作为参数传递

来自分类Dev

如何在C ++中将文件作为参数传递?

来自分类Dev

如何在C ++中将类型作为参数传递?

来自分类Dev

如何在C ++中将类(不是对象)作为参数传递

来自分类Dev

如何在C ++中将文件作为参数传递?

来自分类Dev

如何在C中将连续数组作为参数传递?

来自分类Dev

在C中将函数作为参数传递的问题

来自分类Dev

在C函数中将结构作为参数传递

来自分类Dev

在C ++中将数组作为函数参数传递

来自分类Dev

在C函数中将结构作为参数传递

来自分类Dev

在 C++ 中将函数作为参数传递

来自分类Dev

如何在objective-c中将参数作为key和其他参数作为body传递

来自分类Dev

如何在Python中将函数作为函数参数传递

来自分类Dev

在C ++中将void函数作为参数传递给double函数

来自分类Dev

如何在Elixir中将函数作为参数传递?

来自分类Dev

如何在Java中将函数作为参数传递给Callable

来自分类Dev

如何在Rust中将匿名函数作为参数传递?

来自分类Dev

如何在Vim脚本中将变量作为函数的参数传递

来自分类Dev

如何在Admin类中将函数作为参数传递

来自分类Dev

如何在Rust中将函数作为参数传递

来自分类Dev

如何在salt中将字典作为函数参数传递

来自分类Dev

如何在Excel VBA函数中将日期作为参数传递

Related 相关文章

  1. 1

    如何在C函数中将宏作为参数传递?

  2. 2

    我如何在C ++中将函数作为参数传递

  3. 3

    如何在C ++中将函数作为参数传递?

  4. 4

    如何在C#中将对STATIC方法的引用作为函数参数传递?

  5. 5

    如何在C ++中将多个对象作为参数传递给函数

  6. 6

    如何在C#中将对STATIC方法的引用作为函数参数传递?

  7. 7

    如何在C ++中将数组元素作为参数传递给函数?

  8. 8

    如何在C ++中将类(不是对象)作为参数传递

  9. 9

    如何在C ++中将文件作为参数传递?

  10. 10

    如何在C ++中将类型作为参数传递?

  11. 11

    如何在C ++中将类(不是对象)作为参数传递

  12. 12

    如何在C ++中将文件作为参数传递?

  13. 13

    如何在C中将连续数组作为参数传递?

  14. 14

    在C中将函数作为参数传递的问题

  15. 15

    在C函数中将结构作为参数传递

  16. 16

    在C ++中将数组作为函数参数传递

  17. 17

    在C函数中将结构作为参数传递

  18. 18

    在 C++ 中将函数作为参数传递

  19. 19

    如何在objective-c中将参数作为key和其他参数作为body传递

  20. 20

    如何在Python中将函数作为函数参数传递

  21. 21

    在C ++中将void函数作为参数传递给double函数

  22. 22

    如何在Elixir中将函数作为参数传递?

  23. 23

    如何在Java中将函数作为参数传递给Callable

  24. 24

    如何在Rust中将匿名函数作为参数传递?

  25. 25

    如何在Vim脚本中将变量作为函数的参数传递

  26. 26

    如何在Admin类中将函数作为参数传递

  27. 27

    如何在Rust中将函数作为参数传递

  28. 28

    如何在salt中将字典作为函数参数传递

  29. 29

    如何在Excel VBA函数中将日期作为参数传递

热门标签

归档