如何在Rcpp函数中声明带默认值的List类型入参?
你想要直接在入参处声明带默认值的列表是可以实现的,你之前的写法编译失败是因为C语法对默认参数的限制:C要求默认参数必须是编译期可确定的常量,而List::create是运行时才执行的动态构造逻辑,不符合语法要求,所以不能直接写在C++的参数声明里。
推荐使用Rcpp导出属性的.default参数指定R侧的默认值,C++侧直接接收List参数即可,代码示例如下:
#include <Rcpp.h> using namespace Rcpp; // [[Rcpp::export(.default = list(sv = list(a = c(0,0))))]] NumericVector nicetry (List sv) { NumericVector aux_a = sv["a"]; return aux_a; } /*** R nicetry() nicetry(list(a=rep(1,2))) */
该方案的运行效果和你给出的原生R函数完全一致:
> nicetry() [1] 0 0 > nicetry(list(a=rep(1,2))) [1] 1 1
如果你的使用场景不需要严格在C层面控制默认值,这个方案是最简洁的,完全符合你的需求。如果你必须在C层面处理默认值,你原来的Nullable方案已经是C++层面的规范写法。
内容的提问来源于stack exchange,提问作者Tomasz
相关产品推荐
相关产品推荐

