#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())
}