drake
цели должны возвращать фиксированные объекты данных, которые могут храниться с saveRDS()
(или альтернативными типами файлов, если вы используете специализированные форматы ). Я рекомендую взглянуть на https://books.ropensci.org/drake/plans.html#how-to-выбирать-хорошие-цели . Существуют проблемы с определением запущенного экземпляра приложения Shiny в качестве цели.
- Пока приложение запущено,
make()
никогда не завершится sh. - Это делает не имеет смысла сохранять возвращаемое значение
shinyApp()
как объект данных. Это не совсем то, для чего цель. Цель цели состоит в том, чтобы воспроизводимо кэшировать результаты длинных вычислений, поэтому вам не нужно перезапускать их, пока не будет изменен какой-либо исходный код или данные.
Вместо этого, я думаю, цель цели приложения следует развернуть на веб-сайте, например https://shinyapps.io. Чтобы обновлять приложение при изменении df
, обязательно укажите df
в качестве символа в команде, чтобы анализатор кода drake
stati c мог его забрать. Кроме того, используйте 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)