我想通过传递一个参数列表来调用使用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
答案 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
*/