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中也是這樣,比如:> 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] 01InfInf
此外,在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
[1] 0
> 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] 258
> sum(is.na(x)) ## 缺失值的個數
[1] 2
對於處理含有缺失值的向量,很多函式在預設引數下不能工作,比如:
> x <- c(2, 5, NA, 7, NA, 8)
> mean(x)
[1] NA
> max(x)
[1] NA
> mean(x, na.rm=TRUE)
[1] 5.5
> max(x, na.rm=TRUE)
[1] 8
可通過設定
na.rm
為TRUE
來刪除缺失值,然後再統計
有時我們還想知道缺失值 NA
在哪個位置。此時可以通過 which()
函式來輸出位置索引,比如:
> x <- c(2, 5, NA, 7, NA, 8)
> which(is.na(x)) ## 第3和5個元素是缺失值
[1] 35
有關R語言裡面的特殊值就講到這。
如若有遺漏,後期將會新增至作者部落格,歡迎關注~~