Красивый. Я добавил несколько строк, чтобы удалить ненужные данные между циклами; это не сработало. Мне пришлось бы очищать рабочее пространство каждые 8 отчетов и повторить попытку. Это решение сработало для меня (все 20 отчетов могут быть представлены одновременно). БЛАГОДАРЮ ВАС!
я есть несколько каталогов с файлами 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
?
Я надеюсь, что кто-то может предложить быстрое решение или обходной путь для этого. Если нет, я разработаю пример, чтобы воспроизвести проблему.