为什么R中调用dev.new()会同时打开RStudioGD和png两类图形设备?
R图形设备
dev.new()异常生成多设备的原因说明 核心结论
你观察到的RStudio环境下额外生成png设备的行为不是R原生的设计,是RStudio IDE自定义修改dev.new()函数逻辑导致的,RGui下的运行结果才符合R原生dev.new()的设计预期。
具体原因解释
RStudio环境异常表现的诱因
- RStudio为了支持内置Plots面板的预览、快速导出、历史绘图回溯等功能,重写了
grDevices包原生的dev.new()实现:在调用默认RStudioGD设备用于面板显示的同时,会在后台静默启动一个png设备用于渲染缓存和导出预处理,这就是你在dev.list()中同时看到两个设备的原因 - 你可以在RStudio控制台运行
print(dev.new)验证,输出的函数定义会包含RStudio特有的自定义逻辑,和原生实现完全不同
RGui环境的行为合理性
Windows下RGui调用的是R原生的dev.new()逻辑:它会直接读取getOption("device")对应的系统原生屏幕设备(Windows环境下默认为windows设备),仅生成你预期的单个图形设备,测试结果完全符合原生设计预期。
规避方案
如果需要严格控制图形设备的生成,避免IDE自定义逻辑干扰,不要使用dev.new(),直接显式调用你需要的设备函数即可:
- 调用RStudio内置面板设备:
RStudioGD() - 调用Windows原生窗口设备:
windows() - 调用png文件设备:
png("输出路径.png")
内容的提问来源于stack exchange,提问作者Christoph
相关产品推荐
相关产品推荐

