使用 R 保存具有不同文件名的图
Saving plots with different filenames using R
在微调绘图参数时,我想将所有测试 运行 保存在不同的文件中,这样它们就不会丢失。到目前为止,我设法使用下面的代码做到了:
# 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
此代码有效,生成名称为 "dummy-XX.wmf" 的文件,其中 XX 是 1 到 20 之间的随机数,但看起来很笨重,一点也不优雅。
有没有更优雅的方法来完成同样的事情?甚至,为了记录代码被执行了多少次 运行 并为文件生成漂亮的累进数字?
如果你要打印很多图,你可以这样做
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 以外的任何值。
如果你真的想递增(以避免覆盖已经存在的文件)你可以创建一个像这样的小函数:
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()
在微调绘图参数时,我想将所有测试 运行 保存在不同的文件中,这样它们就不会丢失。到目前为止,我设法使用下面的代码做到了:
# 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
此代码有效,生成名称为 "dummy-XX.wmf" 的文件,其中 XX 是 1 到 20 之间的随机数,但看起来很笨重,一点也不优雅。
有没有更优雅的方法来完成同样的事情?甚至,为了记录代码被执行了多少次 运行 并为文件生成漂亮的累进数字?
如果你要打印很多图,你可以这样做
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 以外的任何值。
如果你真的想递增(以避免覆盖已经存在的文件)你可以创建一个像这样的小函数:
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()