У меня есть несколько папок, которые содержат jpgs сетей на разных этапах симуляции.Я хотел бы перейти в каждую папку, перечислить все файлы jpg и объединить их в GIF, используя магию изображений, а затем снова перейти к родительскому директору.Для этого я написал функцию:
GIFAnimator <- function(dir){
tic()
print(getwd())
# going to directory with files
setwd(dir)
print("listing files")
# list all image files in the subdir
Plots <- list.files(full.names=TRUE, recursive=TRUE, pattern = ".jpg$")
print("ordering files")
# order them correctly
Plots <- Plots[order(nchar(Plots),Plots)]
print("creating animation frames")
# creating frames for animation (we can use read_plots() directly because it is vectorized)
frames <- image_morph(image_read(Plots), frames = 3)
print("pasting animation frames together")
#creating animation
animation <- image_animate(frames)
print("saving animation")
# saving animation
image_write(animation, paste0("Network",substr(dir,14,nchar(dir)),".gif"))
#going up to the main dir again
setwd("..")
print(getwd())
toc()
}
Мои папки называются «OutputPlots», за которыми следует номер (например, OutputPlots23).Поэтому я пытаюсь применить вышеуказанную функцию ко всем каталогам:
DirList <- list.files(pattern="OutputPlots*", full.names=TRUE)
DirList <- DirList[order(nchar(DirList),DirList)]
Например, мой список каталогов для сети с 10 итерациями будет выглядеть так:
[1] "./OutputPlots1" "./OutputPlots2" "./OutputPlots3" "./OutputPlots4" "./OutputPlots5" "./OutputPlots6" "./OutputPlots7" "./OutputPlots8" "./OutputPlots9"
[10] "./OutputPlots10"
Теперь я хочу применить функцию ко всем каталогам, поэтому я попытался
sapply(DirList,GIFAnimator)
Когда я запускаю эту команду, я сталкиваюсь с проблемой.Функция вылетает на второй итерации каждый раз.Более конкретно, функция заканчивает вставку кадров анимации вместе, но зависает при сохранении анимации второй папки.Интересно, что это также происходит, когда я не использую sapply, а использую функцию дважды в отдельных вызовах, например так:
GifAnimate(DirList[1])
GifAnimate(DirList[2])
Это не проблема для конкретной папки, так как я пробовал много разных комбинацийи функция вылетает при втором вызове в каждом созвездии.