You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

点击ActionButton启动第二个Shiny应用时报错:app.R did not return a shiny.appobj object

点击ActionButton启动第二个Shiny应用时报错:app.R did not return a shiny.appobj object

我来帮你分析这个问题的根源,以及对应的解决办法:

问题核心原因

你当前的script.R里用shiny::runApp()直接运行shinyML_classification.R脚本,但这个脚本其实是shinyML包中shinyML_classification()函数的源码文件——它只是定义了函数逻辑,并没有直接返回一个Shiny应用对象(也就是缺少shinyApp(ui, server)这类返回语句)。而runApp()要求目标文件/目录必须能输出shiny.appobj类型的对象,这就是报错的关键所在。

具体解决步骤

1. 修正script.R的内容

把原本通过runApp()调用函数源码的方式,改成直接调用shinyML_classification()函数(这个函数本身就是用来启动对应Shiny应用的封装入口)。修改后的script.R如下:

# 显式加载所需依赖包(Job是独立会话,无法复用主应用的环境)
library(shiny)
library(shinyML)

# 直接调用包内函数启动第二个Shiny应用
shinyML_classification(data = iris, y = "Species", framework = "h2o")

2. 确认路径与权限

  • 检查rstudioapi::jobRunScript()中的path参数是否是script.R的正确绝对路径,避免因路径拼写错误导致脚本无法执行。
  • 确保当前用户对script.R所在目录有读写权限,防止Job执行时出现权限问题。

3. 测试调整后的流程

运行第一个Shiny应用后,点击「Launch second Shiny App」按钮,此时RStudio会启动一个独立的Job会话执行script.R,进而调用shinyML_classification()函数启动第二个应用,两个应用会在各自的会话中运行,不会互相干扰。

额外提示

如果未来你要运行自己编写的自定义Shiny应用脚本,那脚本必须包含完整的UI、Server定义,并且最后要有shinyApp(ui, server)的返回语句,这样runApp()才能识别并启动它。但在这个场景下,因为你用的是shinyML包提供的封装函数,直接调用函数才是最正确的方式。

备注:内容来源于stack exchange,提问作者firmo23

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 10:23:07