r - 检测向量是否至少有 1 个 NA 的最快方法?

标签 r na

在 R 中检测向量是否至少有 1 个 NA 的最快方法是什么?我一直在使用:

sum( is.na( data ) ) > 0

但这需要检查每个元素、强制转换和求和函数。

最佳答案

从 R 3.1.0 开始 anyNA() 是执行此操作的方法。在原子向量上,这将在第一个 NA 之后停止,而不是像 any(is.na()) 那样遍历整个向量。此外,这还可以避免创建带有立即丢弃的 is.na 的中间逻辑向量。借用 Joran 的例子:

x <- y <- runif(1e7)
x[1e4] <- NA
y[1e7] <- NA
microbenchmark::microbenchmark(any(is.na(x)), anyNA(x), any(is.na(y)), anyNA(y), times=10)
# Unit: microseconds
#           expr        min         lq        mean      median         uq
#  any(is.na(x))  13444.674  13509.454  21191.9025  13639.3065  13917.592
#       anyNA(x)      6.840     13.187     13.5283     14.1705     14.774
#  any(is.na(y)) 165030.942 168258.159 178954.6499 169966.1440 197591.168
#       anyNA(y)   7193.784   7285.107   7694.1785   7497.9265   7865.064

请注意,即使我们修改向量的最后一个值,它的速度也要快得多;这部分是因为避免了中间逻辑向量。

关于r - 检测向量是否至少有 1 个 NA 的最快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6551825/

相关文章:

r - 如何在箱线图上放置中位数、第一四分位数和最后四分位数的值?

r - 更改 R 中过滤后的 data.frame 中一列中的所有值

r - 如何拆分 R 中的列?

替换 dplyr 管道中的重复元素

r - 如何在 R 代码中将小于 0 的栅格值替换为 NA

r - data.table 按组填充其他行的缺失值

r - 有没有办法将 lm() 对象 'compress' 用于以后的预测?

r - 在 block 中产生与内联代码相同数量的数字

r - 仅在添加数字时将 NA 视为零