Как использовать блестящее приложение в качестве цели в селезне - PullRequest
0 голосов
/ 22 апреля 2020

Как передать предыдущую цель (df) функциям ui и server, которые я использую в следующей команде shinyApp. Мой план выглядит так:

plan <- drake_plan(
  df = faithful,
  app = shinyApp(ui, server)
)

ui и server скопированы из блестящего урока . Есть только одно отличие - я изменил faithful на df (данные в предыдущей цели). Теперь я получаю сообщение об ошибке:

Warning: Error in $: object of type 'closure' is not subsettable
  [No stack trace available]

Как это решить? Какая лучшая практика?

1 Ответ

1 голос
/ 22 апреля 2020

drake цели должны возвращать фиксированные объекты данных, которые могут храниться с saveRDS() (или альтернативными типами файлов, если вы используете специализированные форматы ). Я рекомендую взглянуть на https://books.ropensci.org/drake/plans.html#how-to-выбирать-хорошие-цели . Существуют проблемы с определением запущенного экземпляра приложения Shiny в качестве цели.

  1. Пока приложение запущено, make() никогда не завершится sh.
  2. Это делает не имеет смысла сохранять возвращаемое значение 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)

enter image description here

В вашем предыдущем плане команда для приложения не упоминала символ df, поэтому drake не знал, что нужно запускать один перед другим.

plan <- drake_plan(
  df = faithful,
  app = shinyApp(ui, server)
)
vis_drake_graph(plan)

enter image description here

...