如何加载在Shiny服务器中创建的新PNG文件保存到www目录?

问题描述 投票:0回答:1

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

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

有什么诀窍可以在不重启整个应用的情况下,为Shiny指向www目录下的新文件?

目前我试过的(在两个反应功能中)。

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

任何帮助或建议都非常感激。谢谢你的帮助

r shiny png shinydashboard visnetwork
1个回答
0
投票

我想我想明白了(好吧,在一个更有经验的同事的帮助下)。

PNG文件是在Shiny服务器上创建和写入的,而且那个URL在创建更新的PNG文件时工作得很好,不需要改变它。

但是,我们可以欺骗服务器将新的一组PNG文件视为唯一的,并重新加载它们(即使它们来自同一个URL),方法是在我们从Shiny读取的PNG URI上添加一个系统时间的查询。比如说

## 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())

这个操作的神奇之处在于 这个查询会被App忽略 但会被serverbrowser适当地处理(重新加载)!

© www.soinside.com 2019 - 2024. All rights reserved.