Rmarkdown 将输出文件定向到目录中

Rmarkdown directing output file into a directory

我发现了 knitr 函数的一个非常好的技巧 (link),您可以在其中将输出 html 保存到输出文件夹中并使用不同的文件名。

您唯一需要前往 header 的是以下内容:

title: "analysis"
author: "Me"
date: "`r format(Sys.time(), '%d %B, %Y, %H:%M')`"
knit: (function(inputFile, encoding) { 
      rmarkdown::render(inputFile,
                        encoding=encoding, 
                        output_file=file.path(dirname(inputFile), out_dir, 'analysis.html')) })
output:
  html_document:
    number_sections: yes
    toc: yes

这对我的 Mac 'sometimes' 非常有效,但有时找不到 out_dir 变量...

我首先想到的是先执行chunks,所以设置了变量...但是这并没有解决问题...

我也重新启动了 R session 但这没有帮助。

最后一步是关闭 R,保存工作区,在重新打开 R 并加载工作区后,它再次运行起来非常棒。

我找不到原来的 post,有人推荐这个技巧...

重现的精确工作流程

打开新项目,在新文件夹中命名为test
创建一个 r markdown 文档
将 header 更改为:

---
title: "Untitled"
author: "Me"
date: "`r format(Sys.time(), '%d %B, %Y, %H:%M')`"
knit: (function(inputFile, encoding) { 
      rmarkdown::render(inputFile,
                        encoding=encoding, 
                        output_file=file.path(dirname(inputFile), out_dir, 'analysis.html')) })
output:
  html_document:
    number_sections: yes
    toc: yes
---

```{r write quant output files}
out_dir <- 'test'
if(!file.exists(out_dir)) {
  dir.create(out_dir)
}
```

将文档另存为test.Rmd
单击编织按钮(html 现在已从按钮的选项中删除)
这将失败!

关闭项目!
点击保存环境!

打开项目并点击编织!
一切正常。

执行 rm(list=ls()) 之后一切正常

您可以尝试在要 knit 渲染的函数中设置 out_dir 变量:

knit: (function(inputFile, encoding) { 
      out_dir <- 'test';
      rmarkdown::render(inputFile,
                        encoding=encoding, 
                        output_file=file.path(dirname(inputFile), out_dir, 'analysis.html')) })

我发现写 output-file 名称很麻烦,所以我将 output_file 换成了 output_dir 参数,但保留了其余代码。通过这种方式,我的 Rmarkdown 仍然编织到一个子目录中,但名称为 inputFile。另外,如果该目录不存在,则创建它

---
title: "title"
author: "gordon freeman"
date: "`r Sys.Date()`"

knit: (function(inputFile, encoding) {
      out_dir <- "reports";
      rmarkdown::render(inputFile,
                        encoding=encoding,
                        output_dir=file.path(dirname(inputFile), out_dir))})
---