【问题标题】:data.table print error when nrow>100当 nrow>100 时 data.table 打印错误
【发布时间】:2015-11-21 00:02:32
【问题描述】:

打印 data.table 时会出现一个奇怪的错误,但仅当 data.table 大小超过 100 时(示例如下)。 当print() 替换为print.data.frame() 时,错误消失。 因此,我的猜测是 print-->print.data.frame 继承仅在 data.table 大小不超过 100 时被识别。

有人可以直观地说明为什么会发生这种情况吗? 我的 R 版本是 3.1.2。

library(data.table)

print(data.table(x=1:100), row.names=F) <-this command prints data.table

print(data.table(x=1:101), row.names=F) <- this command gives an error as below.

Error in `rownames<-`(`#tmp#`, value = rep.int("", nrow(x))) :
  length of 'dimnames' [1] not equal to array extent

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    您可能已将 datatable.print.nrows 选项设置为默认值 100。

    getOption("datatable.print.nrows")
    # [1] 100
    

    您可以通过更改选项的值或在print.data.table() 中使用nrows 来更改打印的行数。后者可能是最好的选择,因为它不会更改默认值。

    args(data.table:::print.data.table)
    # function (x, topn = getOption("datatable.print.topn"), 
    #     nrows = getOption("datatable.print.nrows"), row.names = TRUE, ...) 
    

    这会起作用 -

    dt <- data.table(x = 1:101)
    print(dt, nrows = nrow(dt), row.names = FALSE)
    

    【讨论】:

    • 谢谢。该解决方案对我有用。这是 print.data.table 函数中的一个错误,可以通过使用 'else rownames(toprint) = rep.int("", nrow(x))' 将行中的 nrow(x) 替换为 nrow(toprint) 来修复
    • @JKLi 你是对的。这是一个开放的错误:github.com/Rdatatable/data.table/issues/1167
    猜你喜欢
    • 2012-08-23
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    相关资源
    最近更新 更多