【发布时间】:2018-04-17 21:30:03
【问题描述】:
我有一堆目录,其中包含要编译成 HTML 的 Rmd 文件。对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?
我希望有人可以为此提供快速修复或解决方法。如果没有,我将开发一个示例来重现该问题。
【问题讨论】:
-
你能分享用于创建文件循环的代码吗?
标签: r r-markdown knitr