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

Rmarkdown执行knit编译报错:for循环调用curve绘图提示plot.new未调用

问题修复方案

错误原因

报错核心是第二个代码块中curve()函数设置了add = TRUE参数,该参数要求在已存在的激活画布上叠加绘图。你将两段代码拆分为独立代码块后,第一个代码块仅定义了函数未生成绘图设备,运行第二个代码块时无可用画布,因此触发plot.new has not been called yet错误。

修复方法

方法1:保留多曲线叠加的单张图表效果

在for循环前先初始化空白画布,设置匹配的坐标范围即可,第二个代码块修改为:

# 初始化空白画布,仅绘制坐标轴
plot(x = c(-5,5), y = c(0,1), type = "n", xlab = "x", ylab = "sigmoid值")
for (b in c(1:5)){
  curve(expr = lg(x, 1, b), from = -5, to = 5, n = 100, add= TRUE, col = b)
}

说明:type = "n"参数表示仅生成画布和坐标轴,不绘制任何图形元素,完美适配后续叠加曲线的需求。

方法2:生成单条曲线独立的多张图表

去掉curve()中的add = TRUE参数即可,每次调用curve()会自动新建画布生成单独图表,第二个代码块修改为:

for (b in c(1:5)){
  curve(expr = lg(x, 1, b), from = -5, to = 5, n = 100, col = b)
}

说明:如果编译后仅输出最后一张图,可在curve()外层包裹print()函数强制输出所有循环内生成的图表,即print(curve(...))。

注意事项

确保两个代码块的执行环境连贯,不要为第一个代码块设置cache = FALSE之外的缓存参数,避免第二个代码块无法调用到已定义的lg函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:21:00