我有一个应用程序,我想根据用户输入从查找表中提取值。参考表是基于计算的统计测试,该计算对于用户输入的所有不同组合来说太慢而不能进行。因此,查找所有可能性的表。
但是......现在这个表大约是60 MB(如.Rdata)或214 MB(以.csv为单位),如果扩展可能的用户输入,它会变得更大。我已经减少了数据中的有效数字(到3)并删除了行/列名称。
显然,我可以在响应服务器功能之外预加载查找表,但是它仍然需要花费相当多的时间来加载该数据。有没有人有关于处理Shiny中大量数据的任何提示?谢谢!
答案 0 :(得分:8)
flaneuse,我们仍在使用较小的一套,但我们一直在尝试:
将 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”。
<强> global.R 强>
我们已将readRDS
调用加载到此全局文件中的数据中(而不是在shinyServer()
调用之前的server.R中),因此运行一次,并且可用于所有会话,ui.R
可以看到额外的奖励。
请参阅此scoping explanation了解R Shiny。
预先切片和骰子
标准日报使用最新数据。所以我在我的global.R中做了一个小的latest.dt
我的数据的一个较小的子集。因此,带有最新图表的目标网页可与此较小的数据集配合使用,以获得更快的图表。
然后使用full.dt
的自定义数据标签位于单独的标签上。它比较慢但在那个阶段用户更耐心,并且正在考虑选择什么日期和其他参数。
这个子集的想法可能会对你有所帮助。
会对其他人(有更多要求的数据集已尝试过)感兴趣!