NULL 空值NULL 是用來表示空值的一個特殊值,在列表變數中比較常出現,而 data frames 與函數中也會用到(這些我們在後面的內容會再說明)。
有時候在建立列表變數時,我們會需要預先指定列表變數中應該包含哪一些元素名稱,但是在建立變數時並不知道元素的內容,這時候就可以將未知的元素設定為 NULL,例如:
x.list <- list( foo = "G. T. Wang", bar = NULL, foo.bar = NULL )
NULL 與 NA 有點相似,但兩個是不同的,最大的差異是 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
在 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()