rmarkdown :: render () em um loop - não é possível alocar vetor de tamanho
Eu tenho um monte de diretórios com arquivos Rmd para serem compilados em HTML. Cada chamada pararmarkdown::render
inclui uma grande lista deparams
. Tudo funciona bem quando renderizo os arquivos Rmd individualmente.
No entanto, quando executo uma função que faz um loop nos diretórios e cria os arquivos HTML, ela falha após completar nove (não é um Rmd específico que está causando o problema, ela falha no dia 9, independentemente da ordem).
A parte relevante do traceback de erro é:
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)
O problema parece ser causado por esta linha normarkdown::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)
Parece-me que oparams
das chamadas anteriores estão sendo salvas nos metadados e estão ficando muito grandes apósrmarkdown::render
é chamado 9 vezes na função.
rmarkdown::knitr
tem umknit_meta
argumento, mas a documentação da ajuda diz "(Para uso especializado) Meta dados gerados por knitr"e eu não souknitr
especialista.
Os arquivos Rmd são completamente independentes um do outro. Existe uma maneira de redefinir os metadados knitr de cada chamada pararmarkdown::render
?
Espero que alguém possa oferecer uma solução rápida ou solução alternativa para isso. Caso contrário, desenvolverei um exemplo para reproduzir o problema.