通过RCpp返回NA

时间:2014-05-19 17:51:27

标签: r rcpp

新手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;
}

2 个答案:

答案 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)

为给定的向量类型(NANumericVector,...)获取正确的IntegerVector的规范方法是使用静态get_na方法。类似的东西:

y[0] = NumericVector::get_na() ;

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