我有一个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
。如果Rcpp
是VECTOR_ELT(inp.attr("dimnames"),1)
?
NULL
答案 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
添加colnames
,Rcpp
便捷方法。
(长度检查只是为了确保在1
属性的索引dimnames
处确实找到了一些东西)