【问题标题】:Rcpp - Define a C++ function that takes an R function and an ellipsis argumentRcpp - 定义一个接受 R 函数和省略号参数的 C++ 函数
【发布时间】:2017-03-27 01:33:30
【问题描述】:

我有一个 R 函数 bar,它接受另一个 R 函数 foo,定义如下:

foo <- function(x,y) x + y
bar <- function(foo, z, ...) z + foo(...)

bar 的调用将采用以下形式:

bar(foo, 1,2,3)

现在foo 定义如上,我想创建bar 的C++ 版本。这是我尝试过的:

library(Rcpp)
cppFunction(
'
  double bar(Function foo, double z, ...) {
  return z + foo(...);
 }
 ')

这显然行不通。在 C++ 中定义这个函数的正确方法是什么?

谢谢。

【问题讨论】:

  • 如果您在 R 端有 foo 和所有可用的参数 (...),为什么不直接将 foo(...) 的结果传递给 Rcpp 函数呢?从 C++ 评估 foo(..)总是会比直接从 R 端评估 foo(...) 慢。

标签: c++ r rcpp ellipsis


【解决方案1】:

在将省略号提供给 Rcpp 之前将其转换为列表可能更容易

bar <- function(foo, z, ...) {
   args <- list(...)
   bar_internal(foo, z, args)
}

然后您的 Rcpp 函数可以简单地采用 Rcpp::List 而不是省略号。

double bar_internal(Function foo, double z, List args){

}

【讨论】:

  • 省略号在 C++ 和 R 之间的使用在 Rcpp 上下文中存在许多问题或挑战,因为我们受到SEXP ,Call("someId", SEXP, SEXP, ...) 的约束。我们在代码中进行了一些尝试(然后取决于您使用的是 C++98 还是 C++11 或更高版本),但坦率地说,您最好的选择是 @Jeroen 建议的。避免复杂化并继续前进。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-01
  • 2019-09-10
  • 1970-01-01
  • 2013-04-25
  • 2011-05-01
  • 1970-01-01
  • 2021-12-09
相关资源
最近更新 更多