Автоматическая нумерация файлов в ggsave как в png - PullRequest
0 голосов
/ 18 февраля 2019

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

1 Ответ

0 голосов
/ 18 февраля 2019

Вы можете написать функцию для этого.Например, как насчет простого добавления метки времени.что-то вроде:

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())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...