NULL 空值

NULL 是用來表示空值的一個特殊值,在列表變數中比較常出現,而 data frames 與函數中也會用到(這些我們在後面的內容會再說明)。

有時候在建立列表變數時,我們會需要預先指定列表變數中應該包含哪一些元素名稱,但是在建立變數時並不知道元素的內容,這時候就可以將未知的元素設定為 NULL,例如:

x.list <- list(
  foo = "G. T. Wang",
  bar = NULL,
  foo.bar = NULL
)

NULLNA 有點相似,但兩個是不同的,最大的差異是 NA 是一個純量值,而 NULL 則不佔任何空間:

length(NULL)
[1] 0
length(NA)
[1] 1

要檢查一個變數值是否為 NULL 可以使用 is.null 函數:

is.null(NULL)
[1] TRUE
is.null(NA)
[1] FALSE

如果使用 is.na 來測試 NULL 是沒有意義的,因為 NULL 的長度為 0,沒有東西可以拿來檢查是否為 NA

is.na(NULL)
Warning message:
In is.na(NULL) : is.na() 套用到非串列或向量類型 'NULL'

將列表的元素指定為 NULL 的話,可以將該元素從列表變數中移除(縱使該元素原本就是 NULL 也一樣):

x.list <- list(
  foo = "G. T. Wang",
  bar = NULL,
  foo.bar = NULL
)
x.list
$foo
[1] "G. T. Wang"

$bar
NULL

$foo.bar
NULL
x.list$foo.bar <- NULL
x.list
$foo
[1] "G. T. Wang"

$bar
NULL

如果要將列表的某個元素值設定為 NULL,而不是將其移除,可以使用 list(NULL)

x.list["foo"] <- list(NULL)
x.list
$foo
NULL

$bar
NULL

Pairlists

在 R 中還有另外一種類似列表變數的 pairlist,它主要用於 R 函數參數的傳遞,一般的使用者不會直接使用到 pairlist,唯一比較有可能用到的情況是使用 formals 函數的時候,這個函數會傳回指定函數的參數:

sd.args <- formals(sd)
sd.args
$x


$na.rm
[1] FALSE
class(sd.args)
[1] "pairlist"

pairlist 變數在使用上跟列表變數幾乎相同,唯一的差別只在於空的 pairlist 會傳回 NULL,而空的列表就是一個單純空的列表:

pairlist()
NULL
list()
list()