如何在从模板创建 RStudio 项目期间运行 Shiny 应用程序?
Posted
技术标签:
【中文标题】如何在从模板创建 RStudio 项目期间运行 Shiny 应用程序?【英文标题】:How to run Shiny app during RStudio project creation from template? 【发布时间】:2021-10-09 23:57:24 【问题描述】:我正在创建一个自定义 RStudio 项目模板,详细说明 here。
我已经准备好创建一个新项目,而且我还让 Shiny 应用程序自己运行。
但是,我现在想在上述网页中以相当于我的hello_world()
函数的方式同步运行该应用程序。
我可以围绕我的 Shiny 应用程序编写包装函数,这些函数可以在通过 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()
是否可以在项目创建期间运行 Shiny 应用程序?
【问题讨论】:
【参考方案1】:?shiny::shinyApp
通常在 R 控制台中使用此函数时,Shiny 应用程序对象会自动传递给运行该应用程序的 print() 函数。如果在函数中间调用它,则该值不会传递给 print() 并且应用程序将不会运行。要让应用运行,请将应用对象传递给 print() 或 runApp()。
应用程序在其自包含的函数中正确运行,因为返回的值被无形地传递给 print,但是当函数包含附加代码时不会发生这种情况。
因此,一种解决方案是将函数调用包装在 print()
中。
hello_world <- function(path, ...)
print(run_app())
【讨论】:
以上是关于如何在从模板创建 RStudio 项目期间运行 Shiny 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章
Vue.js 3 s-s-r - 客户端水合期间缺少模板或渲染功能