这里有一个新手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;
}
获取给定向量类型(NumericVector
、IntegerVector
等)的正确 NA
的规范方法是使用静态的 get_na
方法。类似以下代码:
y[0] = NumericVector::get_na() ;
就你的代码而言,使用 Rcpp11
可以直接工作,因为它知道如何将静态的 Na_Proxy
实例 NA
转换为目标类型的正确缺失值。
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$
NumericVector y=no_init(n); for (int i=0;i<n;i++) { y[i]=NA_REAL;}
, 例如y=NumericVector::get_na()
。 - udayget_na
会给你一个单一的值。例如,如果你想要一个大小为n
的NA向量,你可以使用NumericVector y = rep( NumericVector::get_na(), n )
或者NumericVector y(n, NumericVector::get_na() ) ;
。 - Romain Francois