运行flexdashboard时C栈使用接近上限警告的原因咨询
关于Shiny运行时flexdashboard中source脚本触发C栈溢出警告的原因分析
这种情况本质是错误的递归调用触发了C栈空间耗尽,具体逻辑如下:
- 在Shiny/flexdashboard的运行环境中,存在特殊的代码执行上下文追踪机制,用于关联输出内容与对应的脚本来源。
- 当你执行
source("in.R")时,in.R里的print("in.R")语句运行,输出的字符串正好匹配当前正在被source的脚本文件名。 - 此时Shiny的上下文追踪机制会尝试解析这个输出对应的脚本来源,过程中意外触发了对in.R的重复读取/解析操作,而这个操作又会再次执行print语句,进而再次触发上下文追踪,形成无限递归的调用链。
- 每一层递归都会占用一部分C栈空间,当递归层数足够多,栈使用量接近系统设定的上限时,就会抛出
C stack usage ... is too close to the limit的警告。
而普通R脚本环境没有这种额外的上下文追踪机制,所以不会触发递归;当print的字符串是其他文件名(无论存在与否)或不带引号时,无法匹配到当前执行的脚本文件名,也就不会触发这个错误的递归逻辑。
内容的提问来源于stack exchange,提问作者bri85
相关产品推荐
相关产品推荐

