#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))
поскольку «пустой» может вызвать проблемы с некоторыми консольными программами.