Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
is.null不适用于R中的null data.table[可能的错误]?_R_Data.table - Fatal编程技术网

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

is.null不适用于R中的null data.table[可能的错误]?,r,data.table,R,Data.table,我相信这可能是一个错误。如果是,我将报告。正在寻找确认: > is.null(data.table(NULL)) [1] FALSE 我在常见问题解答中看到以下内容: 2.5空数据表是否与DT[0]相同? 否,尽管打印方法另有指示。严格地说,这是不可能的 is.null(data.table(null))返回FALSE。此常见问题可能会在将来重新讨论 如果这是预期的行为:如何检查对象是否为空?特别是,空对象的rbindlist返回一个NULL数据。表如何检查 > is.null

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

> is.null(data.table(NULL))
  [1] FALSE
我在常见问题解答中看到以下内容:

2.5空数据表是否与DT[0]相同? 否,尽管打印方法另有指示。严格地说,这是不可能的 is.null(data.table(null))返回FALSE。此常见问题可能会在将来重新讨论

如果这是预期的行为:如何检查对象是否为空?特别是,空对象的
rbindlist
返回一个
NULL数据。表
如何检查

> is.null(rbindlist(NULL))
  [1] FALSE

我不知道为什么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)
}
它不是
NULL
。从
?列表中

空的pairlist,pairlist()与NULL相同。这是不同的 从列表()


您可以通过查看它的长度是否为0来检查它(
length(DT)==0
)。这就是
data.table:::print.data.table
决定是打印“NULL data.table”还是“空数据表(0行)…”

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

  • data.table(NULL)
    现在打印
    “NULL data.table(0行和0列)”
    并改进了常见问题2.5。感谢:
常见问题2.5现在显示:

FAQ 2.5是一个空数据表,与DT[0]相同?
否。所谓“空数据表”,我们是指
数据表(空)
as.data.table(空)
;i、 e

数据。表| frame
null
,附加了一些属性,使其不可用
NULL
不再使用。在R中,只有纯
NULL
NULL
,由
is.NULL()
测试。什么时候 参考“null data.table”,我们使用小写null来提供帮助 区分大小写NULL。要测试null data.table,请使用
length(DT)==0
ncol(DT)==0
length
稍快,因为它是 基本函数)。空的data.table(
DT[0]
)有一个或多个 列,所有列均为空。那些空列仍然有名称 和类型:


谢谢那就是我最后做的。。jsut检查了
nrow(DT)==0
@Alex length(DT)==0是否与ncol(DT)==0而不是nrow(DT)==0相同。常见问题解答试图说明is.null(data.frame(null))也为FALSE,并且由于is.null不是S3泛型,因此即使我们想更改data.table,也无法更改它。唯一为空的东西是空的
data.table(NULL)
打印“NULL data.table”似乎是个问题,这会误导人,不是吗。具有0列和0行的
数据框的
data.frame(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
> 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"