在rcpp中检查矩阵列表的元素是否为na

时间:2017-09-10 13:18:19

标签: r list matrix rcpp

我有一个矩阵列表,其中一些是NA,如下所示:

listToCheck <- list(NA, matrix(0,nrow = 2, ncol = 2))

我想在Rcpp中编写一个代码来检查列表中的任何元素是否为NA。

我尝试了以下两个,

// [[Rcpp::depends(RcppArmadillo)]]
#include <RcppArmadillo.h>
using namespace Rcpp;

// [[Rcpp::export]]
bool checkNa(int i, List elemInCluster){

   arma::mat matrix = elemInCluster[i];

   if(R_IsNA(matrix(0,0))){
     return true;
   }

   return false;
}

但是当我尝试checkNa(0, listToCheck)时,它不起作用,因为即使矩阵为NA,我尝试访问第一个元素时也会Error in checkNa(0, listToCheck) : Not a matrix.

由于R_IsNA适用于double,有没有办法检查矩阵是NA而不必访问其中一个元素?

1 个答案:

答案 0 :(得分:-1)

使用this example中的try-catch似乎有效:

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
bool checkNa(int i, List elemInCluster){

  try {
    return R_IsNA(elemInCluster[i]);
  } catch(...) {
    return false;
  }
}


> checkNa(0, listToCheck)
[1] TRUE

> checkNa(1, listToCheck)
[1] FALSE