我想编写一个带有NumericMatrix参数的Rcpp函数。如果任何矩阵元素为NA,则返回true,否则返回false。我尝试在所有列上循环is_na,但是我正在寻找一种更整洁的方式。我也担心速度。
bool check(NumericMatrix M){
n=M.ncol();
for(int i=0; i < n; i ++){
if(is_na( M(_,i) ){ return T;}
}
return F;
}
Rcpp糖可以通过组合is_na()
和any()
复制该操作。 is_na()
将检测丢失的值,any()
验证单个值为TRUE
。注意,要检索布尔值,必须将any()
与is_true()
一起使用。
#include<Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
bool contains_na(NumericMatrix M){
return is_true(any(is_na(M)));
}
测试用例:
A = matrix(1:4, nrow = 2)
contains_na(A)
# [1] FALSE
M = matrix(c(1, 2, NA, 4), nrow = 2)
contains_na(M)
# [1] TRUE