You need to enable JavaScript to run this app. 如何在通过模板创建RStudio项目的过程中运行Shiny应用
优惠活动
大模型
产品
解决方案
定价
更多

如何在通过模板创建RStudio项目的过程中运行Shiny应用

问题原因
  • RStudio项目模板的创建函数默认运行在非交互式后台会话中,会话会禁用交互式UI调用,且不会自动打印返回值
  • 你编写的run_app()仅返回Shiny应用对象,普通交互式环境下返回值会被自动打印触发应用启动,但模板函数中无自动打印逻辑,因此仅生成了应用对象但未实际运行
  • 后台会话默认覆盖launch.browser参数,即使配置了也不会主动拉起浏览器
解决方法

第一步:修改模板配置文件

找到你包路径下inst/rstudio/templates/project/中对应的.dcf模板配置文件,新增一行配置声明当前模板为交互式模式:

Interactive: TRUE

完整的.dcf示例如下:

Template: 自定义项目模板
Description: 带Shiny配置流程的自定义RStudio项目模板
Interactive: TRUE
Open: TRUE

第二步:修改代码显式触发Shiny运行

修改run_app()函数,不再仅返回Shiny应用对象,而是显式调用shiny::runApp()启动应用:

run_app <- function() {
  ui <- shiny::fluidPage(shiny::titlePanel("New Project"))
  server <- function(input, output, session) {
    session$onSessionEnded(function() {
      shiny::stopApp()
    })
  }
  app <- shiny::shinyApp(ui = ui, server = server)
  # 显式启动应用,阻塞当前流程直到应用关闭
  shiny::runApp(
    app, 
    # 强制拉起系统默认浏览器
    launch.browser = getOption("shiny.launch.browser", interactive())
  )
}

hello_world <- function(path, ...) {
  # 先创建项目根目录
  dir.create(path, recursive = TRUE, showWarnings = FALSE)
  
  # 调用应用,此时流程会阻塞,直到用户关闭Shiny页面后继续执行后续项目初始化逻辑
  run_app()
  
  # 以下为原有项目初始化逻辑,比如生成配置文件、示例代码等
  writeLines("# 自定义项目", file.path(path, "README.md"))
}

注意事项

  • 若需要通过Shiny收集用户配置来生成项目文件,可在Shiny的stopApp()中返回收集到的参数,在hello_world()中接收后再执行对应文件生成逻辑
  • 若不需要保留Shiny运行产生的临时变量,可在应用关闭后手动清理工作空间

内容的提问来源于stack exchange,提问作者the-mad-statter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 18:54:02