为何R中x <- list()时is.null(x)返回FALSE,y <- c()时返回TRUE?
关于R中
list()与NULL的疑问 先看这段R代码的运行结果:
x <- list() is.null(x) # [1] FALSE y <- c() is.null(y) # [1] TRUE
问题:根据R中NULL的定义,若数据对象为NULL,则is.null()会返回TRUE,但为何x <- list()创建的对象调用is.null()返回FALSE?
原因解析
list()创建的是一个空列表对象,它的类型是list,只是内部没有元素、长度为0,但它本身是真实存在的对象,并不是NULL。- 而
c()在不传入任何参数时,返回的就是NULL——你可以用str(y)验证,会直接显示NULL,所以is.null(y)自然返回TRUE。 - 用
typeof(x)查看x的类型,会得到list;用typeof(y)查看y的类型,结果是NULL,这就是两者最本质的区别。 - 如果要判断一个列表是否为空(没有元素),可以用
length(x) == 0,或者purrr包的is_empty(x);而is.null()的作用是专门判断对象是否是NULL这个特殊的“不存在值”。
内容的提问来源于stack exchange,提问作者Amandeep Singh
相关产品推荐
相关产品推荐

