编写Rcpp函数以检测NumericMatrix是否具有任何NA值

问题描述 投票:0回答:1

我想编写一个带有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;
}
r matrix rcpp
1个回答
4
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.