首先区分两者
logical(0) 不等于 numeric(0)。两者都不等于NULL值,即is.null(logical(0))和is.null(numeric(0))返还值都是FALSE。这很有意思,说明长度为零的值有时却不会别算为空值,但空值的定义却是函数中没有被赋值的参数,特征就是没有值。假如用is.logical判断NA的逻辑值,得到的结果是TRUE。NA可以为正无穷或负无穷,但NULL永远代表的是没有这个值,一个空集的概念。
NULL还有一个问题,就是如果用if-else循环,if(条件)的条件中的假如出现变量被“赋值”是NULL,numeric(0),还是logical(0),就会出现error message说条件中赋值长度不能为零。
所以常用比较 < > ==都不能使用,我突然想到用匹配可不可以
> x = NULL
> x %in% "uw"
# logical(0)
很不幸,这样不行;但是直觉告诉我事情并不那么简单,于是:
> "uw" %in% x
[1] FALSE
哈哈哈,可以返回逻辑值了!!
原函数:
if (is.null(weight.type) | "uw" %in% weight.type) {
.
.
.
}else{
.
.
.
}