Rcpp - 如何检查任何属性是否为NULL

时间:2014-07-14 19:55:34

标签: r rcpp

我有一个Rcpp函数接受NumericMatrix并返回一个NumericVector。在我的代码中,我根据Kevin Ushey的推荐提供了一行:In Rcpp - how to return a vector with names,它将NumericMatrix的列名分配给NumericVector:

out.attr("names")=VECTOR_ELT(inp.attr("dimnames"),1)

如果NumericMatrix没有列名,则此代码会出错,即colnames(inp)=NULL。如果RcppVECTOR_ELT(inp.attr("dimnames"),1)

,如何查看NULL

1 个答案:

答案 0 :(得分:12)

您想要Rf_isNull

SEXP dm = inp.attr("dimnames");
if (!Rf_isNull(dm) && Rf_length(dm) > 1) {
    out.attr("names") = VECTOR_ELT(dm, 1);
}

FWIW,由于这种尴尬,我们可能会在将来的某个时间向rownames添加colnamesRcpp便捷方法。

(长度检查只是为了确保在1属性的索引dimnames处确实找到了一些东西)