Rcpp检查列表是否有元素

时间:2014-04-06 11:31:54

标签: rcpp

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

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

接下来你在R中调用正确的函数(我的程序),并以args作为参数。

classification <- CEC(args)

我想准备下面的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
  }
}

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

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

1 个答案:

答案 0 :(得分:11)

您可能正在寻找containsElementNamed方法:

Rcpp::List list(args);
if( list.containsElementNamed("K") ){
    // something
} else {
    // something else
}

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