在Rcpp中使用整数参数

时间:2013-05-15 08:45:19

标签: c++ r rcpp

是否可以直接将整数SEXP参数转换为整数而无需先将其转换为整数向量?

示例:

#include <Rcpp.h>

SEXP f(SEXP n)
{
    Rcpp::IntegerVector n_vec(n);
    int n1 = n_vec[0];
    ...
    return R_NilValue;
}

1 个答案:

答案 0 :(得分:6)

当然 - as<>()转换器可以做到这一点。

它可以被显式调用(这里你需要),有时被编译器隐式调用,或者甚至被代码生成助手插入,如下所示:

R> cppFunction('int twiceTheValue(int a) { return 2*a; }')
R> twiceTheValue(21)
[1] 42
R> 

如果使用cppFunction()参数调用verbose=TRUE(以及来自Rcpp属性或内联包的相关函数),则会看到生成的代码。

在这里,我得到了

#include <Rcpp.h>

RcppExport SEXP sourceCpp_47500_twiceTheValue(SEXP aSEXP) {
BEGIN_RCPP
    Rcpp::RNGScope __rngScope;
    int a = Rcpp::as<int >(aSEXP);
    int __result = twiceTheValue(a);
    return Rcpp::wrap(__result);
END_RCPP
}

我们的文档解释了BEGIN_RCPPEND_RCPP宏的作用,RNGScope对象的原因 - 您看到了as<>()wrap()你需要的。