【问题标题】:Importing and accessing large data files in Shiny在 Shiny 中导入和访问大型数据文件
【发布时间】:2023-04-06 01:37:01
【问题描述】:

我有一个应用程序,我想根据用户输入从查找表中提取值。参考表是一个统计测试,基于对于用户输入的所有不同组合来说太慢而无法执行的计算。因此,所有可能性的查找表。

但是...现在该表大约为 60 MB(作为 .Rdata)或 214 MB(作为 .csv),如果我扩展可能的用户输入,它会变得更大。我已经将数据中的有效数字数量减少(减少到 3 个)并删除了行/列名称。

显然,我可以在响应式服务器功能之外预加载查找表,但加载该数据仍需要相当长的时间。有没有人有任何关于在 Shiny 中处理大量数据的技巧?谢谢!

【问题讨论】:

  • 你试过fread()readRDS()吗?我想知道它们是否对您有所帮助。
  • 如果 jazzurro 的建议仍然太慢,您可以考虑使用数据库。 mongodb 通过 rmongodb 与 R 配合良好。这样您就可以只查找您需要的内容,而且速度应该非常快。
  • 感谢 jazzurro 和 jan 的建议。 readRDS 将表减少到 25 MB,因此更易于管理。如果初始读取仍然太慢,我会查看数据库选项。

标签: r shiny


【解决方案1】:

flaneuse,我们仍在使用您的较小系列,但我们一直在试验:

  1. 对我们的数据使用 rds

    正如@jazzurro 上面提到的 rds ,你似乎知道如何做到这一点,但其他人的语法如下。

    Format .rds 允许您引入单个 R 对象,以便您可以在需要时对其进行重命名。

    在你的准备数据代码中,例如:

    mystorefile <- file.path("/my/path","data.rds")
    # ... do data stuff
    
    # Save down (assuming mydata holds your data frame or table)
    saveRDS(mydata, file = mystorefile)
    

    在你闪亮的代码中:

    #  Load in my data
    x <- readRDS(mystorefile)
    

    记得在部署时将您的数据 .rds 文件复制到您的应用目录。我们使用数据目录/myapp/data,然后在我们闪亮的代码中将存储文件的file.path 更改为“./data”。

  2. global.R

    我们已经将我们的 readRDS 调用用于加载我们的数据到这个全局文件中(而不是在shinyServer() 调用之前的 server.R 中),所以它只运行一次,并且可用于所有会话,并添加了奖金可以通过ui.R看到。

    请参阅scoping explanation 了解 R Shiny。

  3. 切片和切块

    标准的每日报告使用最新数据。所以我在我的 global.R 中创建了一个小的latest.dt,它是我数据的一个较小子集。因此,带有最新图表的登陆页面与这个较小的数据集一起使用以获得更快的图表。

    使用full.dt 的自定义数据选项卡位于单独的选项卡上。它速度较慢,但​​在那个阶段用户更有耐心,并且正在考虑选择什么日期和其他参数。

    这个子集的想法可能会对你有所帮助。

会对其他人(对数据集要求更高)的尝试感兴趣!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 2012-11-16
    • 2014-01-17
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多