是否可以将整数 SEXP 参数直接转换为整数而不先将其转换为整数 vector ?
例子:
#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()
你需要。
关于c++ - 在 Rcpp 中使用整数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16560549/