5

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

例子:

#include <Rcpp.h>

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

1 回答 1

7

当然——as<>()转换器会这样做。

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

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

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

在这里,我得到

#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_RCPP,END_RCPP宏的作用,RNGScope对象存在的原因 - 您会看到 ,as<>()并且wrap()需要。

于 2013-05-15T11:03:31.273 回答