提问者:小点点

有没有一种方法可以检查rcpp::function的arity?


我需要在运行时检查Rcpp块中函数的arity。我想做的是类似以下的事情:

double loglikelihood(Rcpp::List data, Rcpp::List params, SEXP i, Rcpp::RObject custom_function) {
    Rcpp::Function f = Rcpp::as<Rcpp::Function>(custom_function);
    double res = 0.0;
    if (arity(f) == 3) {
        res = Rcpp::as<double>(f(data, param, i));
    } else if (arity(f) == 2) {
        res = Rcpp::as<double>(f(data, param));
    }
    return res;
}

但是,我看到的关于Rcpp的有限文档似乎没有包含用于检查Rcpp::function的arity的函数。有什么办法可以做到这一点吗?


共1个答案

匿名用户

“有限文档”(目前仅有10个pdf小插图)告诉您,除其他外,我们从R本身得到的所有信息是返回并获取(任意数量的)对象,这些对象可以是一个函数。所以所有这些都要回到R API上,它可能有,也可能没有,这样的访问器可能是公共的,也可能不是公共的,应该被任何人使用,除了R本身。

现在,我们用R注册已编译函数(通常在文件或类似文件中),在进行注册时,这个数目的参数作为第二个参数(超出函数调用名)传递。这表明它是不可能被发现的。