我发现了一个非常棒的技巧(链接),可用于 knitr 的一个功能,你可以将输出的 html 保存到输出文件夹下并使用不同的文件名。
你唯一需要在头部添加的是以下内容:
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上有时能够很好地运行,但有时会遇到找不到out_dir变量的问题...
我最初考虑先执行代码块,以便设置变量...但这并没有解决问题...
我也尝试过重新启动R会话,但没有帮助。
最后一步是关闭R,并保存工作区,在重新打开R并加载工作区后,它就像魔术般地正常工作了。
我无法找到最初的帖子,在那里有人推荐了这个技巧...
重现完整流程:
打开一个新项目,将其命名为test并放在一个新文件夹中
创建一个r markdown文档
将标题更改为:
---
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
点击knit按钮(html现在从按钮选项中移除)
这将失败!
关闭项目!
点击保存环境!
打开项目并单击knit!
一切正常。
执行rm(list=ls()),之后所有内容都能正常工作。
out_dir
,那么 R 如何知道它是什么?当重新加载工作区后这段代码能够正常工作时,这是因为out_dir
是从上一个 R 会话中传递过来的对象,这使得代码能够正常工作,尽管本不应如此。 - Thomas