无法在 data.table::data.table 对象上使用 DT::datatable
Unable to use DT::datatable on data.table::data.table object
我尝试在我的 Shiny App 中创建一个 DataTable,代码如下:
output$table <- renderDataTable({
dat
})
这个 dat
对象是一个 data.table。
我得到了这个错误:
Warning: Error in dimnames.data.table: data.table inherits from data.frame (from v1.5) but this data.table does not. Has it been created manually (e.g. by using 'structure' rather than 'data.table') or saved to disk using a prior version of data.table? The correct class is c('data.table','data.frame').
难道是我无法使用data.table创建DataTable?我能做什么?
感谢@DaisyLee 指出这个问题。看来您设法挖掘了一个相当晦涩且非常古老的测试,该测试在您的代码上出现了不正确的错误。
我 filed an issue 关于这个问题并推送了修复。
您的代码现在应该 运行 在 data.table
版本 1.9.8+ 上。
更新后,您应该能够 运行 您最初尝试的代码片段而不会出错,并且无需使用 as.data.table
或 setDT
。
如果您有兴趣,here's 已修复的代码。
我想提交这个可重现的解决方案示例,因为我在尝试将 data.table 函数应用于没有 data.table 的 class 的数据框时遇到了完全相同的麻烦.我自己解决这个问题花了我很大的力气,因为这个页面上的解决方案隐藏在评论中,而那些评论没有解释如何重现该解决方案。
一发现DF2缺少数据table class,我马上用了DT2 <- as.data.table(DF2) 运行sform() 和 aggregate()。换句话说,我只是在公式的两边使用了我最初认为是数据的对象的名称table。例如,如果它被命名为 PuTTy_2 <- DF2,那么我的公式是
PuTTy_2 <- as.data.table(PuTTy_2)
我 运行 所有可用的软件包更新,包括 data.table,这并没有解决我的问题。只有当我尝试 class(DT2) 与 class(DT1) 时,我才发现 DT2 缺少数据 table class 并且只有数据框 class。因此,DF2 和 DT1 将是合适的缩写。
这似乎是 运行 DF2 <- t运行sform(DT1, ... ) 和 DF2 <- aggregate( ... , DT1) 的结果。虽然我没有通过对代码进行故障排除来直接检查这一点,但我查找了 t运行sform() 和 aggregate() 函数,并确认这两个函数都只适用于数据框。
我尝试在我的 Shiny App 中创建一个 DataTable,代码如下:
output$table <- renderDataTable({
dat
})
这个 dat
对象是一个 data.table。
我得到了这个错误:
Warning: Error in dimnames.data.table: data.table inherits from data.frame (from v1.5) but this data.table does not. Has it been created manually (e.g. by using 'structure' rather than 'data.table') or saved to disk using a prior version of data.table? The correct class is c('data.table','data.frame').
难道是我无法使用data.table创建DataTable?我能做什么?
感谢@DaisyLee 指出这个问题。看来您设法挖掘了一个相当晦涩且非常古老的测试,该测试在您的代码上出现了不正确的错误。
我 filed an issue 关于这个问题并推送了修复。
您的代码现在应该 运行 在 data.table
版本 1.9.8+ 上。
更新后,您应该能够 运行 您最初尝试的代码片段而不会出错,并且无需使用 as.data.table
或 setDT
。
如果您有兴趣,here's 已修复的代码。
我想提交这个可重现的解决方案示例,因为我在尝试将 data.table 函数应用于没有 data.table 的 class 的数据框时遇到了完全相同的麻烦.我自己解决这个问题花了我很大的力气,因为这个页面上的解决方案隐藏在评论中,而那些评论没有解释如何重现该解决方案。
一发现DF2缺少数据table class,我马上用了DT2 <- as.data.table(DF2) 运行sform() 和 aggregate()。换句话说,我只是在公式的两边使用了我最初认为是数据的对象的名称table。例如,如果它被命名为 PuTTy_2 <- DF2,那么我的公式是
PuTTy_2 <- as.data.table(PuTTy_2)
我 运行 所有可用的软件包更新,包括 data.table,这并没有解决我的问题。只有当我尝试 class(DT2) 与 class(DT1) 时,我才发现 DT2 缺少数据 table class 并且只有数据框 class。因此,DF2 和 DT1 将是合适的缩写。
这似乎是 运行 DF2 <- t运行sform(DT1, ... ) 和 DF2 <- aggregate( ... , DT1) 的结果。虽然我没有通过对代码进行故障排除来直接检查这一点,但我查找了 t运行sform() 和 aggregate() 函数,并确认这两个函数都只适用于数据框。