r - 编写一个 Rcpp 函数来检测 NumericMatrix 是否有任何 NA 值
问题描述
我想用 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
推荐阅读
- javascript - 如何在 iframe 中编辑内容或添加样式?
- r - 有没有办法使用重复循环的最后一个值来制作数据框?
- mysql - MySQL内存没有被释放
- vscode-debugger - 本地调试 CluedIn 集成的最佳方法
- css - 如何在 CSS 中删除播放按钮和徽标 img 下的边框?
- javascript - 在元素外部单击时切换元素并移除其可见性 - JavaScript
- reactjs - 如何访问 ReduxSlice 中的状态
- kubernetes - 如何从 HTTP 请求绑定掌舵图中的值?
- r - 有没有办法从 R 中的现有列名生成年份列?
- reactjs - 自动导入类名 Reactjs