Rcpp检查列表是否有元素

lor*_*ger 3 rcpp

我的程序处理群集.除数据集外,用户还必须指定有关集群的一些细节.有两种方法可以解决这个问题:指定群集数量或准备群集描述列表.

args <- list(dataset=points, K=5)
args <- list(dataset=points, clusters=list(
                             list(type="spherical",radius=4),
                             list(type="covariance",covMat=matrix)
                                          )
Run Code Online (Sandbox Code Playgroud)

接下来你用R中的args作为参数调用正确的函数(我的程序).

classification <- CEC(args)
Run Code Online (Sandbox Code Playgroud)

我想像下面这样准备CEC

SEXP CEC(SEXP args) {
  Rcpp::List list(args);
  arma::mat dataset = Rcpp::as<arma::mat>(list["dataset"]);
  if(list.contains("K")) {
    //something
  } else if(list.contains("clusters")) {
    //something
  }
}
Run Code Online (Sandbox Code Playgroud)

我找不到任何API列表或示例如何做到这一点.而且,我研究Rcpp的标题但是List的定义typedef Vector<VECSXP> List ;几乎没有帮助.

有什么我可以用而不是list.contains()吗?

Rom*_*ois 11

你可能正在寻找这种containsElementNamed方法:

Rcpp::List list(args);
if( list.containsElementNamed("K") ){
    // something
} else {
    // something else
}
Run Code Online (Sandbox Code Playgroud)

https://github.com/RcppCore/Rcpp/blob/master/inst/include/Rcpp/vector/Vector.h#L584