drake
目标应该返回可以存储的固定数据对象saveRDS()
(或者如果您使用专门的格式,则返回其他类型的文件)。我建议看看https://books.ropensci.org/drake/plans.html#how-to-choose-good-targets。将 Shiny 应用程序的运行实例定义为目标存在问题。
- 只要应用程序在运行,
make()
就永远不会结束。
shinyApp()
将 的返回值保存为数据对象并没有真正意义。这并不是目标的真正用途。目标的目的是可重复地缓存长时间计算的结果,因此除非某些上游代码或数据发生更改,否则您无需重新运行它。
相反,我认为应用目标的目的应该是部署到像https://shinyapps.io这样的网站。要在df
更改时更新应用程序,请务必df
在命令中将其作为符号提及,以便drake
静态代码分析器可以获取它。此外,用于file_in()
将 Shiny 应用程序脚本声明为依赖项,以便drake
在代码更改时自动重新部署应用程序。
library(drake)
plan <- drake_plan(
df = faithful,
deployment = custom_deployment_function(file_in("app.R"), df)
)
custom_deployment_function <- function(file, ...) {
rsconnect::deployApp(
appFiles = file,
appName = "your_name",
forceUpdate = TRUE
)
}
此外,请务必检查依赖关系图,以便您知道drake
将以正确的顺序运行正确的目标。
vis_drake_graph(plan)
在您之前的计划中,应用程序的命令没有提到符号df
,因此drake
不知道它需要先运行一个。
plan <- drake_plan(
df = faithful,
app = shinyApp(ui, server)
)
vis_drake_graph(plan)