rmarkdown::render() в цикле - не может выделить вектор размера

У меня есть несколько каталогов с файлами Rmd для компиляции в HTML. Каждый звонок rmarkdown::render включает в себя большой список params, Все отлично работает, когда я рендерим файлы Rmd по отдельности.

Однако, когда я выполняю функцию, которая зацикливается на каталогах и создает файлы HTML, происходит сбой после завершения девяти (это не конкретный Rmd, вызывающий проблему, он вылетает 9-го числа независимо от порядка).

Соответствующая часть трассировки ошибок:

Error: cannot allocate vector of size 38.4 Gb

8. knitr::knit_meta_add(old_knit_meta, attr(old_knit_meta, "knit_meta_id")) 

7. rmarkdown::render(input = RMDfile, output_file = RMDfileout, 
        output_format = output, output_dir = dir, param = params, 
        quiet = quiet)

Кажется, проблема вызвана этой строкой в rmarkdown::render:

 on.exit({
    knit_meta_reset()
    if (length(old_knit_meta)) {
      knitr::knit_meta_add(old_knit_meta, attr(old_knit_meta, 
                                               "knit_meta_id"))
    }
  }, add = TRUE)

Мне кажется, что params от предыдущих вызовов сохраняются в метаданных и становятся слишком большими после rmarkdown::render вызывается 9 раз в функции.

rmarkdown::knitr имеет knit_meta аргумент, но справочная документация гласит "(для экспертного использования) метаданные, сгенерированные knitr", и я не knitr эксперт.

Файлы Rmd полностью независимы друг от друга. Есть ли способ сбросить метаданные knitr для каждого вызова rmarkdown::render?

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

1 ответ

Решение

Покопавшись в rmarkdown::render Код на некоторое время я нашел решение.

Добавление knitr::knit_meta(class=NULL, clean = TRUE) до rmarkdown::render(input=file, etc) кажется, делает свое дело..

Другие вопросы по тегам