我有一个矩阵列表,其中一些是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而不必访问其中一个元素?
答案 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