如何在从模板创建 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 - 客户端水合期间缺少模板或渲染功能

如何在单元测试期间访问 .war 类路径中的文件?

如何在从管理面板 Django 1.3 上传的模板中显示图像

Rstudio作图运行后看不到图如何解决?

如何在从另一个小部件拖放事件期间突出显示表格单元格

如何让 HSQLDB 在从 .script 文件初始化数据源期间发出错误消息?