这个话题来自于一个同学跟我讨论的一个问题,问题如下:
他在导出图形的时候出现了报错(直接画图是没有问题的):
图片.png
图片.png
我们来逐条分析一下,这个报错是想表达什么?以及什么情况下可能出现此报错
- dev.off()函数的功能是关闭指定的(默认是当前的)装置,报的错误是不能关闭1号装置,这里也就暗示,当前装置是1号装置,那什么是一号装置呢?原本应该是什么装置呢?
- 1号装置其实是“null device”,它相当于一个占位符。R中,每次只能有一个装置被激活,一旦有其他装置(除了1号装置之外的装置)被打开,那1号装置就不可能被激活。按照报错,当前装置是1号装置,也就是其他装置没有被打开。(可以在不打开图形设备(不要tiff()语句)的情况下直接试一下dev.off()命令,也会发现报此错,是同样的道理)
- 那应该打开的是什么装置呢?我用我的电脑尝试了一下,打开的装置名应该为tiff,此处为2号装置
tiff() dev.cur() tiff 2
参考来源:https://www.math.mun.ca/~jcloredoosti/R/library/grDevices/html/dev.html
综上,是因为tiff()没有成功打开图形装置
在网上搜索的解决办法:(https://9to5answer.com/error-in-dev-off-cannot-shut-down-device-1-the-null-device)
把
dev.off()
改成
while (!is.null(dev.list())) dev.off()
同学试了一下,成功了。这句话的含义就是,一直到有其他设备(除1号设备外)被激活为止,再关闭被激活的设备。(注:dev.list()返回的是除了1号装置之外的其他所有被打开的装置)
重点来了,同学在尝试的过程中新奇的发现,这个错误只会出现在他交互式运行的情况下,如果把这块代码一起运行的话,并不会报错。这点儿很奇怪,我没有找到原因。
同时,他还跟我分享了他发现的一些问题,大家以后可以注意一下
图片.png
接下来再顺带分享一些其他东西
1.Rstudio也可以直接点击Export导出图,并且可以调整大小(其中Save as Image有以下格式可选:PNG, JPEG, TIFF, BMP, Metafile, SVG, EPS)
图片.png