Rcpp使用参数列表调用R函数

时间:2017-06-22 10:34:02

标签: rcpp

我想通过传递一个参数列表来调用使用Rcpp和R函数定义的C ++函数,其方式类似于在R中使用do.call。 这是一个愚蠢的例子:

假设我有一个向量,我想计算一个修剪的平均值。

有两种可能的方法
x = rnorm(100)
mean(x, trim = 0.1)
do.call("mean", list(x = x, trim = 0.1))

在我的特定情况下,使用do.call是首选,因为它可能是要调用的函数要使用的几个参数的列表。

基于stackoverflow中的一些示例,我尝试在C ++中实现上述内容:

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
double foo(Function f, List args)
{
 double out = as<double>(f(args));
 return out;
}

如果args是一个列表,则上述代码不起作用,但前提是它是一个值向量。

任何帮助都将不胜感激。

LS

1 个答案:

答案 0 :(得分:1)

我不确定以下是否符合您的预期。

#include <Rcpp.h>

using namespace Rcpp;

// [[Rcpp::export]]
double foo (Function f, NumericVector x) {
  double out = Rcpp::as<double>(f(x, Named("trim", 0.1)));
  return out;
}

/*
> x = rnorm(100)
> do.call("mean", list(x = x, trim = 0.1))
[1] 0.1832635
> Rcpp::sourceCpp("test.cpp")
> foo(mean, x)
[1] 0.1832635
*/