logical(0) 不等於 numeric(0)。兩者都不等於NULL值,即is.null(logical(0))和is.null(numeric(0))返還值都是FALSE。這很有意思,說明長度為零的值有時卻不會別算為空值,但空值的定義卻是函數中沒有被賦值的參數,特征就是沒有值。如何區分NULL和NA?很簡單,后者的logical length是1,而前者的logical length是0,意思是假如用is.logical判斷NA的邏輯值,得到的結果是TRUE。NA可以為正無窮或負無窮,但NULL永遠代表的是沒有這個值,一個空集的概念。
總結一下is.logical(condition)的返回值, 括號中的條件為以下狀態:
1. numeric(0) == numeric(0)和numeric(0) != numeric(0),返回TRUE。
2. logical(0), numeric(0), NULL,返回FALSE。
3. NA,返回TRUE。
NULL還有一個問題,就是如果用if-else循環,if(條件)的條件中的假如出現變量被“賦值”是NULL,numeric(0),還是logical(0),就會出現error message說條件中賦值長度不能為零。這里tricky的地方在於,盡管logical(0)和numeric(0)並不是NULL object,由於它們三者的“長度”都是零,它們都不算是邏輯值。