2017-06-22 79 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 
*/