是否可以直接将整数SEXP参数转换为整数而无需先将其转换为整数向量?
示例:
#include <Rcpp.h>
SEXP f(SEXP n)
{
Rcpp::IntegerVector n_vec(n);
int n1 = n_vec[0];
...
return R_NilValue;
}
答案 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_RCPP
,END_RCPP
宏的作用,RNGScope
对象的原因 - 您看到了as<>()
和wrap()
你需要的。