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

如何移除R语言.Rnw脚本编译PDF时dev.off()产生的多余输出

问题原因

dev.off() 函数执行后会默认返回下一个激活的图形设备的类型和编号。你在本地控制台运行时,当前默认设备是RStudio内置图形设备,所以返回 RStudioGD 2;而用.Rnw编译PDF时,knitr默认启用的主设备是pdf设备用来生成PDF正文内容,因此关闭png设备后返回的是 pdf 2。默认配置下代码块的返回值会被渲染到最终PDF中,因此出现了多余内容。

解决方法
  • 方法1:抑制dev.off()的返回值输出
    直接把dev.off()替换为invisible(dev.off())即可,invisible()函数会隐藏函数的返回值,不会产生多余输出,也不需要额外配置代码块参数。
    代码示例:
grid.draw(data_x)
invisible(dev.off())
  • 方法2:配置代码块隐藏输出
    在.Rnw代码块的头部参数中添加results='hide',该参数会让knitr不输出这段代码所有的运行结果,适合纯用于生成文件、不需要打印结果的代码块。
    代码示例:
<<results='hide'>>=
g1 <- ggplotGrob(p1)
g2 <- ggplotGrob(p2)
data_x <- rbind(g1, g2, size="first")
data_x$widths <- unit.pmax(g1$widths, g2$widths)

png(filename = "data_x_plot.png",
    pointsize = 500, 
    width = 1200,
    height = 1000,
    units = "px") 
grid.draw(data_x)
dev.off()
@
  • 方法3:改用ggsave直接保存grob对象
    新版本ggplot2的ggsave()支持直接保存grob类型的对象,不需要手动开关图形设备,自然也不会产生dev.off()的返回值问题。
    代码示例:
# 替换原有手动开png、draw、关设备的全部代码
ggsave("data_x_plot.png", plot = data_x, width = 1200, height = 1000, units = "px", dpi = 72)

内容的提问来源于stack exchange,提问作者João Machado

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:54:03