我在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问题中搜索。

10-08 13:23