无法在data.table :: data.table对象上使用DT :: datatable

时间:2016-04-27 02:04:48

标签: r shiny data.table dt

我尝试使用以下代码在我的Shiny App中创建一个DataTable:

    output$table <- renderDataTable({
    dat
    })

dat对象是data.table。 我收到了这个错误:

  

警告:dimnames.data.table中的错误:data.table继承自data.frame(来自v1.5),但此data.table没有。它是手动创建的(例如,使用&#39;结构&#39;而不是&#39; data.table&#39;)或使用先前版本的data.table保存到磁盘?正确的课程是c(&#39; data.table&#39;,&#39; data.frame&#39;)。

是不是因为我无法使用data.table来创建DataTable?我该怎么办?

2 个答案:

答案 0 :(得分:0)

感谢@DaisyLee指出了这个问题。您似乎设法挖掘出一个相当模糊且非常旧的测试,该测试在您的代码上出错。

filed an issue关于这个问题并提出了修复建议。

您的代码现在应在data.table版本1.9.8 +。

上运行

更新后,您应该能够无错误地运行您最初尝试过的代码段,而无需使用as.data.tablesetDT

如果您感兴趣,here's已修复的代码。

答案 1 :(得分:0)

我想提交此解决方案的可重现示例,因为我在尝试将 data.table 函数应用于没有 data.table 类的数据框时遇到了完全相同的问题。我自己花了相当大的精力才弄明白这个问题,因为这个页面上的解决方案隐藏在评论中,而这些评论并没有解释如何重现该解决方案。

一旦我发现 DF2 缺少数据表类,我立即使用 DT2 <- as.data.table(DF2) 在发生了 transform() 和aggregate() 之后。换句话说,我只是简单地使用了我最初认为是数据表的对象的名称,在公式的两侧。例如,如果它被命名为 PuTTy_2 <- DF2,那么我的公式是

     `interface: '//localhost/printer',`

我运行了所有可用的包更新,包括 data.table,这并没有解决我的问题。只有当我尝试 class(DT2) 与 class(DT1) 时,我才发现 DT2 缺少数据表类并且只有数据框类。因此,DF2 和 DT1 应该是合适的缩写。

这似乎是运行 DF2 <- transform(DT1, ... ) 和 DF2 <- aggregate( ... , DT1) 的结果。虽然我没有通过对代码进行故障排除来直接检查这一点,但我查找了 transform() 和 aggregate() 函数,并确认这两个函数仅适用于数据帧。