1. 程式人生 > >R語言初級教程: NA、Inf、NaN、NULL 特殊值

R語言初級教程: NA、Inf、NaN、NULL 特殊值

作者介紹:

楊光輝,R語言中文社群專欄作者,中科院近代物理研究所,科研工作者一枚。目前的研究方向是知識圖譜。知乎專欄:R語言初級教程,個人公眾號:R語言和Python學堂。

這幾個都是R語言裡面的特殊值,都是R的 保留字(reserved words)。它們的意義分別為:

  • NA:表示缺失值(Missing value),是“Not Available”的縮寫

  • Inf:表示無窮大,是“Infinite”的縮寫

  • NaN:表示非數值,是“Not a Number”的縮寫

  • NULL:表示空值,即沒有內容

下面通過一些例子來了解它們的用法。由於有關 NA的內容較多,最後再介紹它。

1. Inf

我們知道,對於分數,當分母為 

0分子不為 0時,結果為無窮大。當分子為正數時,結果為正無窮大;當分子為負數時,結果為負無窮大。在R中也是這樣,比如:

  1. > 2 / 0## 正無窮大

  2. [1] Inf

  3. > -2 / 0## 負無窮大

  4. [1] -Inf

Inf也可參與一些運算,比如:

  1. > 2/Inf## 當分子為有限值、分母無窮大時,結果為0

  2. [1] 0

  3. > exp(-Inf)      ## 自然數e的負無窮大次冪為0

  4. [1] 0

  5. > (0:3)^Inf## 0的窮大次冪為0;1的窮大次冪還為1;大於1的數的無窮大次冪為無窮大

  6. [1]   01InfInf

此外,在R中用 is.finite()is.infinite()來判斷是否為無窮大數,比如:

  1. > is.finite(2)

  2. [1] TRUE

  3. > is.infinite(2/0)

  4. [1] TRUE

2. NaN

有些運算會導致結果為非數值,在R中用 NaN來表示,比如:

  1. > 0 / 0

  2. [1] NaN

  3. > Inf - Inf

  4. [1] NaN

  5. > Inf / Inf

  6. [1] NaN

在R中,用 is.nan()來判斷是否為非數值,比如:

  1. > is.nan(2)

  2. [1] FALSE

  3. > is.nan(NA)     ## 缺失值NA不是非數值

  4. [1] FALSE

  5. > is.nan(0/0)

  6. [1] TRUE

3. NULL

NULL表示空值,表示沒有內容。

一般常用在函式引數中,表示該引數沒有被賦予任何值。也經常用在初始化變數,表示變數沒有任何內容,因此它的長度為0。來看個例子:

  1. > x <- NULL

  2. [1] 0

  3. > length(x)

  4. [1] 0

  5. > is.null(x)      ## is.null()函式判斷是否為空值

  6. [1] TRUE

4. NA

NA表示缺失值(Missing value),我們將會經常碰到這個值。

你可能想知道向量中是否有缺失值。對於這個問題,有人說用 ==關係運算符就行了,是這樣嗎?來看個例子:

  1. > x <- c(2, 5, NA, 7, NA, 8)

  2. > x == NA

  3. [1] NA NA NA NA NA NA

  4. > is.na(x)    ## 正確姿勢

  5. [1] FALSE FALSE  TRUE FALSE  TRUE FALSE

顯然用 ==不可行(為啥不行,仔細想想就明白),在R中可用 is.na()函式來判斷是否為缺失值

有時我們想刪除缺失值或想知道有多少個缺失值,可以通過下面程式碼來實現:

  1. > x[! is.na(x)]     ## 刪除缺失值

  2. [1] 258

  3. > sum(is.na(x))     ## 缺失值的個數

  4. [1] 2

對於處理含有缺失值的向量,很多函式在預設引數下不能工作,比如:

  1. > x <- c(2, 5, NA, 7, NA, 8)

  2. > mean(x)

  3. [1] NA

  4. > max(x)

  5. [1] NA

  6. > mean(x, na.rm=TRUE)

  7. [1] 5.5

  8. > max(x, na.rm=TRUE)

  9. [1] 8

可通過設定 na.rm為 TRUE來刪除缺失值,然後再統計

有時我們還想知道缺失值 NA在哪個位置。此時可以通過 which()函式來輸出位置索引,比如:

  1. > x <- c(2, 5, NA, 7, NA, 8)

  2. > which(is.na(x))    ## 第3和5個元素是缺失值

  3. [1] 35

有關R語言裡面的特殊值就講到這。

如若有遺漏,後期將會新增至作者部落格,歡迎關注~~

640?wx_fmt=jpeg