Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从Rcpp c++;功能_C++_R_Rcpp - Fatal编程技术网

C++ 从Rcpp c++;功能

C++ 从Rcpp c++;功能,c++,r,rcpp,C++,R,Rcpp,我在R端定义了一个函数,如下所示: foo <- function(arg1, arg2, arg3) { ... } 它工作正常,但我想检查R函数是否有3个参数。如何在C++方法中得到R函数的ARG数?< P>可以使用(和 RCPP::函数< /C> >派生类:RCP::RestVestRe>)获取公式,然后得到其元素的数量: #include <Rcpp.h> using namespace Rcpp; // [[Rcpp::export]] int n_for

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

foo <- function(arg1, arg2, arg3) {
    ...
}
它工作正常,但我想检查R函数是否有3个参数。如何在C++方法中得到R函数的ARG数?

< P>可以使用(和<代码> RCPP::函数< /C> >派生类:RCP::RestVestRe><代码>)获取公式,然后得到其元素的数量:

#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
#包括
使用名称空间Rcpp;
//[[Rcpp::导出]]
int n_formals(){
Environment env=Environment::global_env();
函数funct=env[“foo”];
SEXP SEXP_funct=函数。获取函数();
SEXP函数形式=形式(SEXP函数);
返回Rf_长度(函数形式);
}
/***R
foo foo n_formals()
# [1] 3

为什么你要用C++来接口一个函数?您仍然使用R,只是以更麻烦的方式调用。“你读过我们的小插图和TAS文件吗?”DrkdDelbuteltter可能是实际代码中的回调。在包的最终版本中,C++函数将对R函数的名称应用一个参数,因此用户可以定义多个R函数并顺序执行它们,这就是我所要寻找的。谢谢@很高兴听到这个消息!
#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