我将在一个eventReactive中创建的PNG文件保存到我的ShinyApp的www目录中。另一个eventReactive能够读取这些PNG输出。
但是当我重新运行第一个eventReactive时,虽然它在www目录下创建了新的文件,但是第二个eventReactive却忽略了新的输入,继续显示初始的PNG文件。
有什么诀窍可以在不重启整个应用的情况下,为Shiny指向www目录下的新文件?
目前我试过的(在两个反应功能中)。
任何帮助或建议都非常感激。谢谢你的帮助
我想我想明白了(好吧,在一个更有经验的同事的帮助下)。
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适当地处理(重新加载)!