运行R绘图代码调用pdf()函数生成文件时报错的原因
R语言pdf()图形设备创建失败、无法生成绘图文件的诱因定位
从给出的代码来看,触发报错的核心原因按出现概率从高到低排序如下:
- 目标存储路径不存在:代码中指定的输出路径为
figures/marketvalue-sales.pdf,R的pdf()函数不会自动创建不存在的上级目录,如果当前工作路径下没有手动创建过figures文件夹,函数会直接抛出“无法打开目标设备”的错误。运行绘图代码前先执行dir.create("figures", recursive = TRUE, showWarnings = FALSE)创建对应目录即可解决。 - 目标文件被占用锁定:如果之前运行代码已经生成过同名PDF文件,且该文件正被PDF阅读器、WPS等程序打开,系统会锁定文件的写入权限,导致R无法写入内容、覆写文件,关闭所有占用该文件的程序后重试即可。
- 调用对象未提前加载:代码中使用的
Forbes2000数据集不属于R内置数据集,也不在你加载的gridGraphics包中,如果没有提前加载包含该数据集的包、或手动导入该数据集,运行plot()语句时会触发“找不到对象'Forbes2000'”的报错,容易被误判为pdf设备创建环节的问题。 - PDF版本参数兼容问题:部分低版本R的
pdf()设备对version = "1.4"参数存在兼容bug,可以先移除该参数使用默认配置测试,确认是否为参数导致的设备初始化失败。
可直接运行如下测试代码逐段排查:
# 1. 创建输出目录 dir.create("figures", recursive = TRUE, showWarnings = FALSE) # 2. 提前加载Forbes2000数据集,以HSAUR包为例,未安装的话先执行install.packages("HSAUR") library(HSAUR) # 3. 初始化PDF设备,暂不指定version参数 pdf("figures/marketvalue-sales.pdf") # 4. 执行绘图 plot(log(marketvalue) ~ log(sales), data = Forbes2000, col = rgb(0, 0, 0, 0.1), pch = 16) # 5. 关闭图形设备 dev.off()
内容的提问来源于stack exchange,提问作者khalif nhashon
相关产品推荐
相关产品推荐

