在Shiny中导入和访问大型数据文件

时间:2014-09-04 02:32:25

标签: r shiny

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

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

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

1 个答案:

答案 0 :(得分:8)

flaneuse,我们仍在使用较小的一套,但我们一直在尝试:

  1. rds 用于我们的数据

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

    格式.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的自定义数据标签位于单独的标签上。它比较慢但在那个阶段用户更耐心,并且正在考虑选择什么日期和其他参数。

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

  4. 会对其他人(有更多要求的数据集已尝试过)感兴趣!