【问题标题】:rmarkdown::render() in a loop - cannot allocate vector of sizermarkdown::render() 在循环中 - 无法分配大小向量
【发布时间】: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


【解决方案1】:

rmarkdown::render 代码中挖掘了一段时间后,我找到了解决方案。

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

【讨论】:

  • 美丽。我添加了一些行来删除循环迭代之间的任何不必要的数据;那没有用。我必须每 8 个报告清除一次工作区,然后再试一次。这个解决方案对我有用(可以一次呈现所有 20 个报告)。谢谢!
猜你喜欢
  • 1970-01-01
  • 2021-08-15
  • 2022-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-22
  • 1970-01-01
  • 2014-02-18
相关资源
最近更新 更多