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

Lau*_*hes 14 r shiny

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

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

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

mic*_*str 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)
    
    Run Code Online (Sandbox Code Playgroud)

    在您闪亮的代码中:

    #  Load in my data
    x <- readRDS(mystorefile)
    
    Run Code Online (Sandbox Code Playgroud)

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

  2. global.R

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

    请参阅R Shiny的这个范围解释.

  3. 前面切片和骰子

    标准日报使用最新数据.所以我latest.dt在我的global.R中做了一个较小的数据子集.因此,具有最新图表的登录页面可以使用这个较小的数据集来获得更快的图表.

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

    这个子集的想法可以帮助你.

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