Сохранение графиков из цикла поверх объекта datetime

#r #loops #plot #datetime-format

#r #циклы #график #datetime-формат

Вопрос:

Я получаю это сообщение об ошибке при автоматическом сохранении графиков так часто, что я собрал очень простой пример на основе этого кода, чтобы проиллюстрировать свое разочарование.

Это код, основанный на примере, который, очевидно, работает:

 names <- LETTERS[1:5] 

for(i in seq_along(names)){
  x <- rnorm(10, 5, 1)
  y <- seq(1:10)

  mypath <- file.path("YOUR_FILE_PATH",paste("myplot_", names[i], ".tiff", sep = ""))

  tiff(file=mypath)
  mytitle <- paste("my title is", names[i])
  plot(x,y, main = mytitle)
  dev.off()
}
  

Теперь замените символьную строку names на POSIXlt объект:

     dates <- c("2015-04-27 14:30:00","2015-04-27 18:15:00",
               "2015-04-27 22:30:00","2015-04-27 22:45:00",
               "2015-04-27 23:00:00")
    dates <- as.data.frame(dates)
    dates <- strptime(dates$dates,format = "%Y-%m-%d %H:%M:%S")

    for(i in seq_along(dates)){
      x <- rnorm(10, 5, 1)
      y <- seq(1:10)

      mypath <- file.path("YOUR_FILE_PATH",paste("myplot_", dates[i], ".tiff", sep = ""))

      tiff(file=mypath)
      mytitle <- paste("my title is", dates[i])
      plot(x,y, main = mytitle)
      dev.off()
    }
  

Затем я получаю всплывающее окно с надписью «ПУТЬ к ФАЙЛУ / myplot_2015-04-27 14:30:00. tiff: не удается открыть», и R выдаст мне следующее сообщение об ошибке:

 Warning messages:
1: In dev.off() :
  unable to open TIFF file 'FILEPATH/myplot_2015-04-27 14:30:00.tiff'
  

Хорошо, так что R, похоже, не нравится POSIXlt объект. Давайте попробуем просто распечатать графики:

 for(i in seq_along(dates)){
  x = rnorm(10, 5, 1)
  y = seq(1:10)

  mytitle = paste("my title is", dates[i])
  print(plot(x,y, main = mytitle))
}
  

Это работает, по крайней мере, после перезапуска R, поскольку по какой-то причине он все еще хочет распечатать графики в указанном ранее пути к файлу. Таким образом, проблема заключается не в формате, а в сохранении в файл. Может кто-нибудь объяснить мне это, пожалуйста?

Комментарии:

1. В зависимости от файловой системы, с которой вы работаете, пробелы в имени файла могут быть проблемой, попробуйте указать формат даты, который не содержит пробелов и других специальных символов, например with strftime .

2. по крайней мере, в моей Windows, : не допускается в именах файлов.

3. Спасибо миллион — это сработало. Чувствую себя немного глупо, что сам об этом не подумал…

4. @DaveTurek прав, : является частью запрещенного символа, члена этого списка запрещенных символов в пути к файлу Windows . Я бы предложил : заменить _ и восстановить дату-время позже

5. Я предпочитаю что-то вроде: gsub(":", ".", gsub(" ", "_", dates)) поскольку «пустой» может вызвать проблемы с некоторыми консольными программами.