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

调用runApp()时出现“C stack usage 15924224 is too close to the limit”错误的原因及解决方法

解决Shiny应用runApp(".")启动时的C栈溢出问题

问题原因分析

你遇到的C stack usage ... is too close to the limit错误,核心原因是无限递归调用:

  • 你的脚本里同时写了shinyApp(ui = ui, server = server)和runApp(".")两个启动语句,而且这个脚本应该是命名为app.R放在当前工作目录下的。
  • 当你执行runApp(".")时,Shiny会自动加载当前目录下的app.R脚本;而脚本里的runApp(".")又会再次触发加载app.R,形成无限循环,不断消耗栈内存,最终触发C栈溢出。
  • 而直接执行shinyApp(ui = ui, server = server)时,是直接调用已经定义好的ui和server对象,不会触发递归加载,所以能正常启动。

对应的解决办法

1. 移除重复的启动语句(最关键)

你只需要保留一种启动方式即可:

  • 如果习惯直接运行脚本启动:删除runApp("."),只保留shinyApp(ui = ui, server = server),运行脚本就能启动应用。
  • 如果想用runApp(".")启动:删除脚本里的shinyApp(ui = ui, server = server)和runApp("."),只保留ui和server的定义(runApp(".")会自动读取app.R里的ui和server对象来启动应用)。

2. 规范文件结构(可选优化)

  • 确保你的应用脚本命名为app.R,并且放在你执行runApp(".")的当前工作目录下。
  • 另外,你的代码里图片用了绝对路径C:/Users/asus/Desktop/App-1/rstudio.png,这种方式在不同环境下可能失效。建议在应用目录下创建www子目录,把图片放进去,然后用img(src="rstudio.png", height=70, width=200)调用,这是Shiny应用加载静态资源的标准方式。

3. 临时调整栈限制(仅作为最后手段)

如果是其他递归场景导致的栈溢出(而非本次的重复启动语句问题),可以临时调整R的栈限制,但不推荐作为首要方案:

# 在启动应用前执行,提高表达式栈上限
options(expressions = 500000)

注意:这个方法可能带来稳定性问题,优先解决代码里的递归逻辑问题才是根本。

小提示

你的代码里还有个小笔误:div("install packages('shiny')", style="color:red")应该改成div("install.packages('shiny')", style="color:red")(正确的包安装函数是install.packages)。

内容的提问来源于stack exchange,提问作者user19562955

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 13:02:27