我相信这可能是一个错误。如果是这样,我将报告。寻找确认:
> is.null(data.table(NULL))
[1] FALSE
Run Code Online (Sandbox Code Playgroud)
我在常见问题解答中看到以下内容:
2.5 NULL data.table是否与DT [0]相同?否,尽管打印方法另有说明。严格来说,不可能有is.null(data.table(NULL))返回FALSE。将来可能会再次访问该常见问题解答。
如果这是预期的行为:如何检查对象是否为null?特别rbindlist是一个NULL对象返回一个NULL data.table怎么检查?
> is.null(rbindlist(NULL))
[1] FALSE
Run Code Online (Sandbox Code Playgroud)
我不确定为什么将FAQ如此表述。但是,空数据表只是一个空列表:
> 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)
}
Run Code Online (Sandbox Code Playgroud)
不是NULL。来自?list:
一个空的pairlist,pairlist()与NULL相同。这与list()不同。
您可以通过查看其长度是否为0(length(DT) == 0)来进行检查。这是data.table:::print.data.table决定打印“ NULL data.table”还是“ Empty data table(0行)...”的决定。
好点子。现在已经改变了 的输出data.table(NULL)。来自 v1.8.9 中的新闻:
\n\n\n\n
\n- \n
data.table(NULL)现在打印"Null data.table (0 rows and 0 cols)"和常见问题解答 2.5 已得到改进。感谢:is.null 不适用于 R 中的 null data.table [可能的错误]?
常见问题解答 2.5 现为:
\n\n\n\n\nFAQ 2.5 null data.table 与 DT[0] 相同吗?不。 \xe2\x80\x9dnull data.table\xe2\x80\x9d 是指or
\n
的结果;IE,data.table(NULL)as.data.table(NULL)
> data.table(NULL)\nNull data.table (0 rows and 0 cols)\n> as.data.table(NULL)\nNull data.table (0 rows and 0 cols)\n> data.frame(NULL)\ndata frame with 0 columns and 0 rows\n> as.data.frame(NULL)\ndata frame with 0 columns and 0 rows\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n\nnull附加
\ndata.table|frame了NULL一些属性,使其不再\nNULL。在 R 中,只有纯的NULL才是NULL通过 测试的is.null()。当引用 \xe2\x80\x9dnull data.table\xe2\x80\x9d 时,我们使用小写 null 来帮助区分大写 NULL。要测试空 data.table,请使用\nlength(DT)==0或ncol(DT)==0(length稍微快一些,因为\xe2\x80\x99 是一个\n 原始函数)。一个空的数据表(DT[0]) 具有一或多\n 列,且全部为空。这些空列仍然具有名称\n和类型:
> DT = data.table(a=1:3,b=c(4,5,6),d=c(7L,8L,9L))\n> DT[0]\nEmpty data.table (0 rows) of 3 cols: a,b,d\n> sapply(DT[0],class) \n a b d \n"integer" "numeric" "integer"\nRun Code Online (Sandbox Code Playgroud)\n