0

我将在一个 eventReactive 中创建的 PNG 文件保存到我的 ShinyApp 的 www 目录中。另一个 eventReactive 能够读取这些 PNG 输出。

但是,当我重新运行第一个 eventReactive 时,虽然它在 www 目录中创建了新文件,但第二个 eventReactive 忽略了新输入并继续显示初始 PNG 文件。

在不重新启动整个应用程序的情况下为 Shiny 指向 www 目录中的新文件的技巧是什么?

到目前为止我尝试过的(在两个反应函数中):

  • 删除 www 目录并使用反应函数重新创建它。
  • 使用 system.file() 和 img() 函数显式加载新创建的 PNG 文件。

非常感谢任何帮助或建议。谢谢

4

1 回答 1

0

我想我想通了(好吧,在一位更有经验的同事的帮助下):

正在从 Shiny 服务器创建和写入 PNG 文件,并且该 URL 可以正常工作以创建更新的 PNG 文件,无需更改它。

但是,我们可以通过将系统时间查询添加到我们从 Shiny 读取的 PNG URI 来欺骗服务器,使其将新的 PNG 集视为唯一并重新加载它们(即使它们来自同一个 URL)。例如:

## Write out the PNG file(s) like this:
ggsave(paste0(outPath, "/www/plot_1.png"),p, width = 20, height = 20, units = "in")

## Reading in the PNG file:
#    This one is not going to work:
~image = paste0(outPath, "/www/plot_1.png")~
#    This one correctly refreshes as an old PNG is replaced:
image = paste0(path_to_images, "/www/plot_1.png?t=", Sys.time())

这个操作的神奇之处在于查询将被应用程序忽略,但会被服务器/浏览器适当地处理(新加载)!

于 2020-05-19T06:08:29.960 回答