Напишите функцию R cpp, чтобы определить, имеет ли NumericMatrix какие-либо значения NA - PullRequest
0 голосов
/ 14 апреля 2020

Я хочу написать функцию R cpp с аргументом NumericMatrix. Возвращает true, если какой-либо из элементов матрицы равен NA, иначе 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;
}

1 Ответ

4 голосов
/ 14 апреля 2020

R cpp сахар может повторить операцию путем объединения 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
...