在 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/