我相信这可能是一个错误。如果是的话,我会报告。寻找确认:
> is.null(data.table(NULL))
[1] FALSE
我在常见问题解答中看到以下内容:
2.5 NULL data.table与DT [0]相同吗? 不,尽管打印方法另有说明。严格来说,这是不可能的 is.null(data.table(NULL))返回FALSE。此FAQ可能会在未来重新审视。
如果这是预期的行为:如何检查对象是否为空?特别是,NULL对象的rbindlist
返回NULL data.table
所以如何检查?
> is.null(rbindlist(NULL))
[1] FALSE
答案 0 :(得分:4)
我不确定为什么常见问题的措辞是这样的。但是,空数据表只是一个空列表:
> data.table:::null.data.table
function ()
{
ans = list()
setattr(ans, "class", c("data.table", "data.frame"))
setattr(ans, "row.names", .set_row_names(0L))
settruelength(ans, 0L)
alloc.col(ans)
}
不是NULL
。来自?list
:
空的pairlist,pairlist()与NULL相同。这是不同的 来自list()。
您可以通过查看长度为0(length(DT) == 0
)来检查它。这是data.table:::print.data.table
确定是否打印“NULL data.table”或“Empty data table(0 rows)...”的内容。
答案 1 :(得分:3)
好点。现在已经更改了data.table(NULL)
的输出。来自v1.8.9中的新闻:
data.table(NULL)
现在打印"Null data.table (0 rows and 0 cols)"
,FAQ 2.5已经改进。感谢:is.null does not work on null data.table in R [possible bug]?
常见问题2.5现在读取:
FAQ 2.5 null data.table与DT [0]相同吗?
否。“null data.table”是指data.table(NULL)
或as.data.table(NULL)
的结果> data.table(NULL) Null data.table (0 rows and 0 cols) > as.data.table(NULL) Null data.table (0 rows and 0 cols) > data.frame(NULL) data frame with 0 columns and 0 rows > as.data.frame(NULL) data frame with 0 columns and 0 rows
;即,
data.table|frame
null
NULL
是NULL
,附加了一些属性,但却没有NULL
了。在R中,NULL
仅测试纯is.null()
为length(DT)==0
。什么时候 引用“null data.table”我们使用小写null来帮助 区别于大写NULL。要测试null data.table,请使用ncol(DT)==0
或length
(DT[0]
稍快一点,因为它是a 原始功能)。空data.table(> DT = data.table(a=1:3,b=c(4,5,6),d=c(7L,8L,9L)) > DT[0] Empty data.table (0 rows) of 3 cols: a,b,d > sapply(DT[0],class) a b d "integer" "numeric" "integer"
)有一个或多个 列,所有这些都是空的。那些空列仍然有名称 和类型:
{{1}}