繁体   English   中英

从Rcpp C ++函数获取R函数args

[英]Getting r function args from Rcpp c++ function

我已经在R端定义了一个函数,如下所示:

foo <- function(arg1, arg2, arg3) {
    ...
}

以及使用Rcpp的c ++中的函数,该函数获取全局环境并实例化R函数以从该函数执行该函数。 这是代码:

namespace Rcpp;
void myFunction() {
    ...
    Environment env = Environment::global_env();
    Function funct = env["foo"];
    ...
}

它工作正常,但我想检查一下R函数是否恰好具有3个参数。 如何在c ++方法中获取R函数的args数量?

您可以使用闭包访问宏FORMALSPreserveStorage成员函数get__()Rcpp::FunctionRcpp::PreserveStorage的派生类)来获取形式,然后获取其元素数量:

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
int n_formals() {
    Environment env = Environment::global_env();
    Function funct = env["foo"];
    SEXP sexp_funct = funct.get__();
    SEXP funct_formals = FORMALS(sexp_funct);
    return Rf_length(funct_formals);
}


/*** R
foo <- function(x, y) x + y
n_formals()
foo <- function(x, y, z) x + y + z
n_formals()
*/

# > foo <- function(x, y) x + y
# 
# > n_formals()
# [1] 2
# 
# > foo <- function(x, y, z) x + y + z
# 
# > n_formals()
# [1] 3

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM