c++ - 从 Rcpp C++ 函数获取 r 函数参数

标签 c++ r rcpp

我在 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 函数的参数个数?

最佳答案

您可以使用 closure access macro FORMALSPreserveStorage member function get__() (Rcpp::FunctionRcpp::PreserveStorage 的派生类)获取formal,然后获取其元素个数:

#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

关于c++ - 从 Rcpp C++ 函数获取 r 函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55495461/

相关文章:

读取二进制向量

通过 RCpp 返回 NA

R Rcpp std::转换失败

c++ - OpenCV imread 默默失败的原因?

c++ - 计算机内存中发生了什么?

r - ggplot2:绘制两种尺寸的美学

减少每个因子 dplyr 方法的级别数

c++ - RcppArmadillo 是否需要预先实例化所需的参数?

c++ - 使用托管 C++ 库时出现 WS2_32.dll_unloaded 异常

c++ - 当值改变时,获取 QComboBox 的先前值,该值位于 QTableWidget 中