使用R保存具有不同文件名的图

时间:2015-02-02 06:53:00

标签: r plot filenames

在对图表进行微调时,我想将所有测试运行保存在不同的文件中,这样它们就不会丢失。到目前为止,我设法使用下面的代码:

# Save the plot as WMF file - using random numbers to avoid overwriting
  number <- sample(1:20,1)
  filename <- paste("dummy", number, sep="-")
  fullname <- paste(filename, ".wmf", sep="")
  # Next line actually creates the file
  dev.copy(win.metafile, fullname)
  dev.off() # Turn off the device

此代码有效,生成名称为&#34; dummy-XX.wmf&#34;的文件,其中XX是1到20之间的随机数,但它看起来很麻烦而且不够优雅。

有没有更优雅的方法来实现同样的目标?或者甚至,要保持代码运行次数的计数并为文件生成好的渐进数字?

2 个答案:

答案 0 :(得分:1)

如果要打印许多图表,可以执行类似

的操作
png("plot-%02d.png")
plot(1)
plot(1)
plot(1)
dev.off()

这将创建三个文件“plot-01.png”,“plot-02.png”,“plot-03.png”

您指定的文件名可以采用类似sprintf的格式,其中传入的绘图索引。请注意,当您打开新的图形设备时,计数会重置,因此所有对plot()的调用都需要在致电dev.off()之前完成。

但请注意,使用此方法时,它不会查看哪些文件已存在。它总是将计数重置为1.此外,没有办法将第一个索引更改为1以外的任何值。

答案 1 :(得分:1)

如果你真的想要增加(为了避免覆盖已存在的文件),你可以创建一个像这样的小函数:

createNewFileName = function(path  = getwd(), pattern = "plot_of_something", extension=".png") {
  myExistingFiles = list.files(path = path, pattern = pattern)
  print(myExistingFiles)
  completePattern = paste0("^(",pattern,")([0-9]*)(",extension,")$")
  existingNumbers  = gsub(pattern = completePattern, replacement = "\\2", x = myExistingFiles)

  if (identical(existingNumbers, character(0)))
    existingNumbers = 0

  return(paste0(pattern,max(as.numeric(existingNumbers))+1,extension))
}

# will create the file myplot1.png
png(filename = createNewFileName(pattern="myplot"))
hist(rnorm(100))
dev.off()

# will create the file myplot2.png
png(filename = createNewFileName(pattern="myplot"))
hist(rnorm(100))
dev.off()