is.null不适用于R [可能的bug]中的null data.table?

时间:2013-03-10 00:25:55

标签: r data.table

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

> 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

2 个答案:

答案 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中的新闻:

  

常见问题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 NULLNULL,附加了一些属性,但却没有   NULL了。在R中,NULL仅测试纯is.null()length(DT)==0。什么时候   引用“null data.table”我们使用小写null来帮助   区别于大写NULL。要测试null data.table,请使用   ncol(DT)==0lengthDT[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}}