簡體   English   中英

像png中一樣在ggsave中自動為文件編號

[英]Automatic file numbering in ggsave as in png

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()

您可以編寫一個函數來執行此操作。 例如,簡單地添加時間戳如何。 就像是:

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())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM