1

我正在尝试在 R Shiny 中创建仪表板。作为这个仪表板的一部分,我有一个非常大的数据集,它有一个反应性添加的列,而这个数据集的三个反应性子集是通过在不同日期过滤产生的。

到目前为止,我已经通过 dplyr 并使用 filter 和 mutate 函数实现了上述目标。但是,我注意到代码中的这些点似乎在减慢它的速度。当任何触发这些表更新的反应变量发生变化时,处理每个表大约需要 10 秒。所以我希望加快速度。

我知道 dplyr 比 data.table 慢得多,但另一方面,它更容易理解语法。我也知道存在 dtplyr 包以将 dplyr 代码转换为 data.table 语法,但我无法让它工作。

我一直在查看文档和一些 youtube 演示,据我了解,似乎为了使用 dtplyr,我需要使用lazy_dt 函数来转换表,然后将标准 dplyr 函数应用于该表,然后使用as.data.table() 或 as.tibble() 命令将其转换回数据表。

但是,代码不起作用,即使我基本上遵循了与演示中完全相同的语法。

这是一些使用我在主代码中导入的库的示例代码,它使用了 iris 数据集。它在 print 和 as.data.table 命令中产生以下错误:

Error in env_get_list(ns_env("data.table"), dt_funs) : 
  argument "default" is missing, with no default

我无法弄清楚这个错误是什么意思或为什么会发生。没有“默认”参数。lazy_dt 唯一需要的参数是 X,它是要通过它传递的数据集。

这是示例代码。我正在关注这个 Youtube 教程... https://www.youtube.com/watch?v=qwHHVU-NBLw ...您可以看到库之后的前三行代码与中的语法完全相同视频,但在视频中打印功能打印表格,但我的产生错误。任何想法为什么?注意:即使将其应用于我的实际代码,我也会收到此错误,所以这不仅仅是因为我正在尝试打印lazy_dt 表。

library(shiny)
library(shinydashboard)
library(DT)
library(data.table)
library(dtplyr)
library(dplyr)
library(tidyverse)
library(Dict)
library(hash)
library(ModelMetrics)
library(vroom)
library(lubridate)
library(Rmisc)

iris_lazy <- dtplyr::lazy_dt(x=iris)

class(iris_lazy)

print(iris_lazy)

as.data.table(iris_lazy)
4

1 回答 1

0

尝试将您的 data.table 版本升级到 >= 1.13.0。data.table 的最低要求将在 dtplyr 的下一个版本中更新。

https://github.com/tidyverse/dtplyr/issues/224

于 2021-04-02T18:11:13.627 回答