使用RCpp返回NA

5

这里有一个新手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个回答

8

获取给定向量类型(NumericVectorIntegerVector等)的正确 NA 的规范方法是使用静态的 get_na 方法。类似以下代码:

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

就你的代码而言,使用 Rcpp11 可以直接工作,因为它知道如何将静态的 Na_Proxy 实例 NA 转换为目标类型的正确缺失值。


顺便说一句,在Rcpp中实现相同的行为将是微不足道的。 - Romain Francois
谢谢,很好。这可能是一种简写方式:NumericVector y=no_init(n); for (int i=0;i<n;i++) { y[i]=NA_REAL;}, 例如 y=NumericVector::get_na() - uday
1
get_na会给你一个单一的值。例如,如果你想要一个大小为n的NA向量,你可以使用NumericVector y = rep( NumericVector::get_na(), n )或者NumericVector y(n, NumericVector::get_na() ) ; - Romain Francois

7
请至少尝试通过我们回归测试提供的大量示例来进行grep:
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问题,并在编写R扩展手册中得到了解答。
您还可以在这篇Rcpp Gallery帖子以及其他一些帖子中找到很好的示例; Rcpp Gallery右侧有一个搜索功能。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接