当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R NA “不可用”/缺失值


R语言 NA 位于 base 包(package)。

说明

NA是长度为 1 的逻辑常量,其中包含缺失值指示符。NA可以强制转换为除原始向量之外的任何其他向量类型。也有常量NA_integer_,NA_real_,NA_complex_NA_character_支持缺失值的其他原子向量类型:所有这些都是预订的中的单词R语言。

通用函数 is.na 指示缺少哪些元素。

通用函数 is.na<- 将元素设置为 NA

通用函数anyNA以可能更快的方式实现any(is.na(x))(特别是对于原子向量)。

用法

NA
is.na(x)
anyNA(x, recursive = FALSE)

## S3 method for class 'data.frame'
is.na(x)

is.na(x) <- value

参数

x

一个R待测试对象:默认方法is.naanyNA处理原子向量、列表、对列表和NULL.

recursive

逻辑:anyNA 应该递归地应用于列表和配对列表吗?

value

x 一起使用的合适索引向量。

细节

字符类型的 NA 与字符串 "NA" 不同。需要指定显式缺失字符串的程序员应使用 NA_character_ (而不是 "NA" )或使用 is.na<- 将元素设置为 NA

is.naanyNA 是通用的:您可以编写方法来处理特定类的对象,请参阅 InternalMethods

函数 is.na<- 可能提供一种更安全的方法来设置缺失。例如,它对于因子的表现有所不同。

数值计算使用NA通常会导致NA:一个可能的例外是NaN也涉及,在这种情况下可能会导致(这可能取决于R平台)。然而,这并不能得到保证,未来的 CPU 和/或编译器的行为可能会有所不同。动态二进制翻译也可能会影响这种行为(使用 valgrind,使用NA可能会导致NaN即使没有NaN参与了)。

逻辑计算将 NA 视为缺失的 TRUE/FALSE 值,因此如果表达式不依赖于 NA 操作数,则可能返回 TRUEFALSE

anyNA 的默认方法处理没有类的原子向量和 NULL 。它在具有类的对象上调用 any(is.na(x)) ,在列表和配对列表上调用 recursive = FALSE

应用于原子向量的 is.na 的默认方法返回与其参数 x 长度相同的逻辑向量,其中包含 TRUE 对于标记为 NA 的元素,或者对于数字或复数向量,包含 NaN ,否则FALSE。 (如果复数值的实部或虚部为 NANaN ,则复数值被视为 NA 。) dimdimnamesnames 属性将复制到结果中。

默认方法也适用于列表和配对列表:
为了is.na,按元素计算结果为 false,除非该元素是长度为 1 的原子向量并且该向量的单个元素被视为NA或者NaN(请注意,任何is.na元素类的方法被忽略)。
anyNA(recursive = FALSE)工作方式与is.na;anyNA(recursive = TRUE)适用anyNA(使用方法分派)到每个元素。

is.na 的数据帧方法返回一个与数据帧具有相同维度的逻辑矩阵,并且其暗名称取自数据帧的行和列名称。

anyNA(NULL)是假的;is.na(NULL)logical(0)(从此不再警告R版本 3.5.0)。

例子

is.na(c(1, NA))        #> FALSE  TRUE
is.na(paste(c(1, NA))) #> FALSE FALSE

(xx <- c(0:4))
is.na(xx) <- c(2, 4)
xx                     #> 0 NA  2 NA  4
anyNA(xx) # TRUE

# Some logical operations do not return NA
c(TRUE, FALSE) & NA
c(TRUE, FALSE) | NA


## Measure speed difference in a favourable case:
## the difference depends on the platform, on most ca 3x.
x <- 1:10000; x[5000] <- NaN  # coerces x to be double
if(require("microbenchmark")) { # does not work reliably on all platforms
  print(microbenchmark(any(is.na(x)), anyNA(x)))
} else {
  nSim <- 2^13
  print(rbind(is.na = system.time(replicate(nSim, any(is.na(x)))),
              anyNA = system.time(replicate(nSim, anyNA(x)))))
}


## anyNA() can work recursively with list()s:
LL <- list(1:5, c(NA, 5:8), c("A","NA"), c("a", NA_character_))
L2 <- LL[c(1,3)]
sapply(LL, anyNA); c(anyNA(LL), anyNA(LL, TRUE))
sapply(L2, anyNA); c(anyNA(L2), anyNA(L2, TRUE))

## ... lists, and hence data frames, too:
dN <- dd <- USJudgeRatings; dN[3,6] <- NA
anyNA(dd) # FALSE
anyNA(dN) # TRUE

参考

Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.

Chambers, J. M. (1998) Programming with Data. A Guide to the S Language. Springer.

也可以看看

NaNis.nan 等,以及实用函数 complete.cases

na.actionna.omitna.fail 了解如何调整方法来处理缺失值。

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 ‘Not Available’ / Missing Values。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。