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)
似乎可以解决问题..
我有一堆包含 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)
似乎可以解决问题..