在png()
中,第一个参数为filename = "Rplot%03d.png"
,这将导致文件以升序生成。但是,在ggsave,
中这是行不通的,该数字始终保持为最低数字(Rplots001.png“),并且该文件始终被覆盖。
查看grDevices函数的代码(例如grDevices::png()
,似乎自动命名发生在.External()
调用的函数中
R中是否已经实现了该文件命名功能的实现,以便可以在grDevices函数之外进行访问?
编辑: 提出不同的问题,在关闭并重新启动设备后,是否可以继续自动编号?例如,在此代码中,后两个文件将覆盖前一个文件:
png(width = 100)
plot(1:10)
plot(1:10)
dev.off()
png(width = 1000)
plot(1:10)
plot(1:10)
dev.off()
答案 0 :(得分:0)
您可以编写一个函数来执行此操作。例如,简单地添加时间戳如何。像这样:
fname = function(basename = 'myfile', fileext = 'png'){
paste(basename, format(Sys.time(), " %b-%d-%Y %H-%M-%S."), fileext, sep="")
}
ggsave(fname())
或者,如果您更喜欢顺序编号,则遵循
next_file = function(basename = 'myfile', fileext = 'png', filepath = '.'){
old.fnames = grep(paste0(basename,' \\d+\\.', fileext,'$'),
list.files(filepath), value = T)
lastnum = gsub(paste0(basename,' (\\d+)\\.', fileext,'$'), '\\1', old.fnames)
if (!length(lastnum)) {
lastnum = 1
} else {
lastnum = sort(as.integer(lastnum),T)[1] + 1L
}
return(paste0(basename, ' ', sprintf('%03i', lastnum), '.', fileext))
}
ggsave(next_file())