通过RCpp返回NA

uda*_*day 3 r rcpp

新手RCpp问题:如何让NumericVector返回NAR?例如,假设我有一个RCpp代码,它分配NA给向量的第一个元素.

// [[RCpp::export]]
NumericVector myFunc(NumericVector x) {
   NumericVector y=clone(x);
   y[0]=NA; // <----- what's the right expression here?
   return y;
}
Run Code Online (Sandbox Code Playgroud)

Dir*_*tel 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$ 
Run Code Online (Sandbox Code Playgroud)

而且,这实际上是R的C问题,并在Writing R Extensions手册中回答.

您也可以在此Rcpp Gallery帖子以及其他帖子中找到一个很好的例子; 在Rcpp画廊有一个搜索功能.


Rom*_*ois 7

NA为给定的向量类型 ( NumericVector, IntegerVector, ...)获取正确值的规范方法是使用静态get_na方法。就像是:

y[0] = NumericVector::get_na() ;
Run Code Online (Sandbox Code Playgroud)

FWIW,您的代码与 一样工作Rcpp11,它知道如何从静态Na_Proxy 实例NA转换为目标类型的正确缺失值。