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

R3.3.2调用自定义绘图函数触发无限递归错误求因

问题原因:无限递归导致的嵌套过深错误

嘿,这个问题我太熟悉了!你遇到的核心问题是自定义函数名和R内置函数重名,直接触发了无限递归:

你把自己的函数命名为plot,但R本身就有一个负责基础绘图的内置函数plot()。当你在自定义函数内部写plot(model)时,R会优先调用你自己定义的这个plot函数,而不是系统内置的版本——这就形成了一个死循环:函数不断调用自己,一层嵌套一层,直到超出R允许的表达式嵌套上限,就抛出了Error: evaluation nested too deeply: infinite recursion / options(expressions=)?这个错误。

而你未封装成函数时,直接调用plot(model)用的是内置的plot(),自然不会有问题。


解决方案

有两种简单的修复方式:

方案1:修改自定义函数名称(推荐)

直接给你的函数换一个不会和内置函数冲突的名字,比如plot_model_diagnostics:

x=rnorm(1000)+sin(c(1:1000)/100)#random data+ sinus superimposed
plot_model_diagnostics <- function(model){
 par(mfrow=c(2,2))# plot window settings
 plot(model)  # 现在这里会正常调用内置的plot()函数
 lines(filter(model,rep(1/30,30)),col='red')
 plot(filter(model,rep(1/30,30)))
 # 补充你未完成的代码部分
}

方案2:明确指定调用内置plot函数

如果你一定要保留plot作为函数名,可以在内部调用时指定使用graphics包(内置plot所在的包)的版本:

x=rnorm(1000)+sin(c(1:1000)/100)#random data+ sinus superimposed
plot <- function(model){
 par(mfrow=c(2,2))# plot window settings
 graphics::plot(model)  # 明确调用系统内置的plot函数
 lines(filter(model,rep(1/30,30)),col='red')
 graphics::plot(filter(model,rep(1/30,30)))
 # 补充你未完成的代码部分
}

小提醒

在R里尽量避免用内置函数名(比如c、mean、sum、plot)或者常用包的函数名作为自定义对象/函数的名字,不然很容易出现这类覆盖、递归的问题,排查起来还很头疼~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:20:18