新手RCpp问题:如何让NumericVector返回NA
到R?例如,假设我有一个RCpp代码,它将NA
赋给向量的第一个元素。
// [[RCpp::export]]
NumericVector myFunc(NumericVector x) {
NumericVector y=clone(x);
y[0]=NA; // <----- what's the right expression here?
return y;
}
答案 0 :(得分:7)
请至少尝试通过我们的回归测试提供的大量示例:
edd@max:~$ cd /usr/local/lib/R/site-library/Rcpp/unitTests/cpp/
edd@max:/usr/local/lib/R/site-library/Rcpp/unitTests/cpp$ grep NA *cpp | tail -5
support.cpp: Rf_pentagamma( NA_REAL) ,
support.cpp: expm1( NA_REAL ),
support.cpp: log1p( NA_REAL ),
support.cpp: Rcpp::internal::factorial( NA_REAL ),
support.cpp: Rcpp::internal::lfactorial( NA_REAL )
edd@max:/usr/local/lib/R/site-library/Rcpp/unitTests/cpp$
此外,这实际上是R的C问题,并在Writing R Extensions手册中回答。
您也可以在this Rcpp Gallery post以及其他人中找到一个很好的例子;在Rcpp Gallery处有一个搜索功能。
答案 1 :(得分:4)
为给定的向量类型(NA
,NumericVector
,...)获取正确的IntegerVector
的规范方法是使用静态get_na
方法。类似的东西:
y[0] = NumericVector::get_na() ;
FWIW,您的代码与Rcpp11
一样工作,它知道如何将静态Na_Proxy
实例NA
转换为目标类型的正确缺失值。