C++ 从Rcpp c++;功能
我在R端定义了一个函数,如下所示: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
foo <- function(arg1, arg2, arg3) {
...
}
它工作正常,但我想检查R函数是否有3个参数。如何在C++方法中得到R函数的ARG数?< P>可以使用(和<代码> RCPP::函数< /C> >派生类:#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
#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