Как запустить приложение Shiny во время создания проекта RStudio из шаблона?

#r #shiny #rstudio

Вопрос:

Я создаю пользовательский шаблон проекта RStudio, как описано здесь.

У меня есть все необходимое для создания нового проекта, и у меня также есть Блестящее приложение, работающее само по себе.

Однако теперь я хотел бы синхронно запустить приложение в том, что соответствует моей hello_world() функции на приведенной выше веб-странице.

Я могу написать функции-оболочки вокруг своего блестящего приложения, которые работают по желанию вне контекста создания нового проекта из шаблона с помощью меню RStudio, но в контексте создания нового проекта создается впечатление, что строки для запуска приложения нет, так как приложение не появляется, и нет сообщений, предупреждений или ошибок.

 # function works as expected outside context of creating a new project
run_app <- function() {
  ui <- shiny::fluidPage(shiny::titlePanel("New Project"))
  server <- function(input, output, session) {
    session$onSessionEnded(function() {
      shiny::stopApp()
    })
  }
  shiny::shinyApp(ui = ui, server = server,
                  options = list(launch.browser = TRUE))
}

# but nothing Shiny related happens if called within the new project creation function
# the new project creation process continues as if the call to start the app is not present
hello_world <- function(path, ...) {
  run_app()
}
 

Можно ли запустить блестящее приложение во время создания проекта?

Ответ №1:

?shiny::shinyApp

Обычно, когда эта функция используется в консоли R, объект приложения Shiny автоматически передается функции print (), которая запускает приложение. Если это вызывается в середине функции, значение не будет передано в функцию print (), и приложение не будет запущено. Чтобы запустить приложение, передайте объект приложения в функцию print() или runApp().

Приложение корректно работает в своей автономной функции, поскольку возвращаемое значение незаметно передается на печать, но этого не происходит, когда функция содержит дополнительный код.

Поэтому решение состоит в том, чтобы обернуть вызов функции в a print() .

 hello_world <- function(path, ...) {
  print(run_app())
}