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
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()