首发于 R语言教程
R语言初级教程(12): NA、Inf、NaN、NULL 特殊值

R语言初级教程(12): NA、Inf、NaN、NULL 特殊值

这几个都是R语言里面的 特殊值 ,都是R的 保留字 (reserved words)。它们的意义分别为:

  • NA :表示 缺失值 (Missing value),是“Not Available”的缩写
  • Inf :表示 无穷大 ,是“Infinite”的缩写
  • NaN :表示 非数值 ,是“Not a Number”的缩写
  • NULL :表示 空值 ,即没有内容

下面通过一些例子来了解它们的用法。由于有关 NA 的内容较多,最后再介绍它。

1. Inf

我们知道,对于分数,当分母为 0 分子不为 0 时,结果为 无穷大 。当分子为正数时,结果为 正无穷大 ;当分子为负数时,结果为 负无穷大 。在R中也是这样,比如:

> 2 / 0      ## 正无穷大
[1] Inf
> -2 / 0      ## 负无穷大
[1] -Inf

Inf 也可参与一些运算,比如:

> 2/Inf       ## 当分子为有限值、分母无穷大时,结果为 0
[1] 0
> exp(-Inf)      ## 自然数e的负无穷大次幂为0
[1] 0
> (0:3)^Inf       ## 0的穷大次幂为0;1的穷大次幂还为1;大于1的数的无穷大次幂为无穷大
[1]   0   1 Inf Inf

此外,在R中用 is.finite() , is.infinite() 来判断是否为无穷大数,比如:

> is.finite(2)
[1] TRUE
> is.infinite(2/0)
[1] TRUE

2. NaN

有些运算会导致结果为 非数值 ,在R中用 NaN 来表示,比如:

> 0 / 0
[1] NaN
> Inf - Inf
[1] NaN
> Inf / Inf
[1] NaN

在R中,用 is.nan() 来判断是否为非数值,比如:

> is.nan(2)
[1] FALSE
> is.nan(NA)     ## 缺失值NA不是非数值
[1] FALSE
> is.nan(0/0)
[1] TRUE

3. NULL

NULL 表示 空值 ,表示没有内容。

一般常用在函数参数中,表示该参数没有被赋予任何值。也经常用在初始化变量,表示变量没有任何内容,因此它的长度为0。来看个例子:

> x <- NULL
> length(x)
[1] 0
> is.null(x)      ## is.null()函数判断是否为空值
[1] TRUE

4. NA

NA 表示 缺失值 (Missing value),我们将会经常碰到这个值。

你可能想知道向量中是否有缺失值。对于这个问题,有人说用 == 关系运算符就行了,是这样吗?来看个例子:

> x <- c(2, 5, NA, 7, NA, 8)
> x == NA
[1] NA NA NA NA NA NA
> is.na(x)    ## 正确姿势
[1] FALSE FALSE  TRUE FALSE  TRUE FALSE
显然用 == 不可行(为啥不行,仔细想想就明白),在R中可用 is.na() 函数来判断是否为缺失值

有时我们想 删除缺失值 或想 知道有多少个缺失值 ,可以通过下面代码来实现:

> x[! is.na(x)]     ## 删除缺失值
[1] 2 5 8
> sum(is.na(x))     ## 缺失值的个数
[1] 2

对于处理含有缺失值的向量, 很多函数在默认参数下不能工作 ,比如:

> x <- c(2, 5, NA, 7, NA, 8)
> mean(x)
[1] NA
> max(x)
[1] NA