我在Hadley Wickham的书中读到,RObjects应该在R的C API中声明为S表达式(SEXP):
SEXP x( SEXP a, SEXP b {
}
但是,在Rcpp中,这种必要性似乎已经结束。换句话说,应使用某些已定义的数据类型声明函数,例如:
NumericVector x(NumericVector a, NumericVector b) {
}
是否存在一些示例,其中SEXP声明在Rcpp的上下文中仍然有用?
最佳答案
当然可以,因为所有内容都可以转换为SEXP
或从SEXP
转换。在某些情况下,我们选择保留List
。
一个“经典”的示例是run-time switching on type(其中显示了SEXP
,但您可以使用一个as<>
进行相同操作)。其他示例是wrap()
和SEXP
转换器。
还有...当然是用户选择保留ojit_code的代码。您可以在Rcpp Gallery上搜索更多示例,和/或当然也可以在大约2000个Rcpp问题中搜索。