Функция Magicks image_write () вылетает R при каждом втором вызове - PullRequest
0 голосов
/ 27 мая 2019

У меня есть несколько папок, которые содержат 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])

Это не проблема для конкретной папки, так как я пробовал много разных комбинацийи функция вылетает при втором вызове в каждом созвездии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...