是否可以直接将整数 SEXP 参数转换为整数,而无需先将其转换为整数向量?
例子:
#include <Rcpp.h>
SEXP f(SEXP n)
{
Rcpp::IntegerVector n_vec(n);
int n1 = n_vec[0];
...
return R_NilValue;
}
当然——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()
需要。