2017-06-22 67 views
0

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

假设我有一个向量,我想计算一个修剪的均值。两种可能的方法是

x = rnorm(100) 
mean(x, trim = 0.1) 
do.call("mean", list(x = x, trim = 0.1)) 

在我的特定情况下使用do.call是可取的,因为它可能是几个参数以供功能使用的列表被调用。

基于在计算器发现了一些实施例中,我试图执行在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

我不是很确定下面是你期望的。

#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 
*/