is.null对R中的null data.table不起作用[可能的错误]?

Ale*_*lex 4 r data.table

我相信这可能是一个错误。如果是这样,我将报告。寻找确认:

> 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)

use*_*457 5

我不确定为什么将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行)...”的决定。

  • @Alex length(DT)== 0与ncol(DT)== 0相同,而不是nrow(DT)== 0。 (2认同)

Mat*_*wle 5

好点子。现在已经改变了 的输出data.table(NULL)。来自 v1.8.9 中的新闻:

\n\n
\n \n
\n\n

常见问题解答 2.5 现为:

\n\n
\n

FAQ 2.5 null data.table 与 DT[0] 相同吗?不。 \xe2\x80\x9dnull data.table\xe2\x80\x9d 是指or
的结果;IE,data.table(NULL)as.data.table(NULL)

\n
\n\n
> 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\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n

null附加data.table|frameNULL一些属性,使其不再\n NULL。在 R 中,只有纯的NULL才是NULL通过 测试的is.null()。当引用 \xe2\x80\x9dnull data.table\xe2\x80\x9d 时,我们使用小写 null 来帮助区分大写 NULL。要测试空 data.table,请使用\n length(DT)==0ncol(DT)==0length稍微快一些,因为\xe2\x80\x99 是一个\n 原始函数)。一个空的数据表(DT[0] ) 具有一或多\n 列,且全部为空。这些空列仍然具有名称\n和类型:

\n
\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"\n
Run Code Online (Sandbox Code Playgroud)\n