rmarkdown::render() 在循环中 - 无法分配大小的向量

rmarkdown::render() in a loop - cannot allocate vector of size

我有一堆包含 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 文件彼此完全独立。有没有办法为每次调用 rmarkdown::render 重置 knitr 元数据?

我希望有人可以为此提供快速修复或解决方法。如果没有,我将开发一个示例来重现该问题。

在研究 rmarkdown::render 代码一段时间后,我找到了解决方案。

rmarkdown::render(input=file, etc) 之前添加 knitr::knit_meta(class=NULL, clean = TRUE) 似乎可以解决问题..