【发布时间】:2014-08-26 10:33:23
【问题描述】:
我有一个项目文件夹,这是我的工作目录。我们称之为项目。 project 文件夹下有 4 个子目录:code、data、figures 和 documents。
我想将我的.Rmd 文件放在code 子目录中。我希望这些数字进入figures 子目录。我希望将.html、.md 和.docx 文件放入documents 子目录。我想从data 子目录中读取我的数据。这种组织结构可能吗?我似乎无法让它工作。
我首先将工作目录设置为project,因为我知道knitr 会查找包含.Rmd 文件的文件夹,如果未指定,则将其视为工作目录。
```{r setglobal, cache = FALSE, include = TRUE}
library(knitr)
opts_knit$set(root.dir = "..")
```
然后我尝试设置相对于工作目录的图形路径。
```{r setchunk, cache=FALSE, include=TRUE}
opts_chunk$set(fig.path = "./figures/")
getwd()
```
工作目录正确报告为project。从data 子目录中正确读取数据。所有输出都正确呈现,所有代码都运行。
```{r readdata}
crctx <- readRDS("./data/crctx.rds")
getwd()
*run lots of analyses here*
```
但是这些数字最终会出现在project/code/figures 目录中,而不是project/figures。
我也尝试过设置base.dir,但这似乎并没有改变任何东西。我添加了参数
base.dir = "./figures"
到opts_knit$set 列表。我什至尝试对完整路径进行硬编码。但似乎没有什么能够改变这一点。
我正在使用 R 3.10 和 RStudio 0.98.953。这是 Mac 0SX 10.9.4。
我错过了什么吗?有没有办法将输出文件放在自己的目录中?
这很重要的原因是我希望我们公司都使用相同的目录结构,这将使我们能够更好地组织我们的项目。
提前感谢您的帮助。
更新:
我意识到opts_chunk$set(fig.path = "./figures/") 是不正确的。我假设使用opts_knit$set(root.dir = normalizePath("../")) 将根目录设置为项目文件夹将对knitr 进行全局更改,因为这是它应该做的。它确实适用于数据子目录,现在可以使用"./data" 访问它,这允许代码运行。但是,全局设置不适用于图形输出。因此,正确的规范是opts_chunk$set(fig.path = "../figures/")——使用../ 而不是./。我认为 Richie Cotton 解决了这个问题,但我有一段时间没看出来。
我还使用 OSX 中的终端创建了一个从 project/documents 到 project/code/figure 的符号链接,这是由 knitr 默认创建的。有了这个,knitr 查找正确的子目录,但所有内容都以projects/documents 结尾。这真的很好。我无法让 R 使用 file.symlink 正确创建符号链接。但它在终端中运行良好。去图吧。
更新 2:
我也得到了输出文件。您必须直接使用 knit 命令。正文如下。
Knitr 代码用于在代码/分析中使用 .Rmd 编织降价文档并在输出/报告中输出:
knit("./code/knitr_file.Rmd", "./documents/knitr_output.md”)
将 .md 文件转换为 .docx 的 Pandoc 代码 - 使用与 .md 文件相同的文件夹
pandoc("./documents/knitr_output.md", format = "docx”)
输出样式(来自 knitr 文档)
pandoc('knitr_output.md', format='html') # HTML
pandoc('knitr_output.md', format='latex') # LaTeX/PDF
pandoc('knitr_output.md', format='docx') # MS Word
pandoc('knitr_output.md', format='odt') # OpenDocument
【问题讨论】:
-
看看
normalizePath是否适合你。 -
我查看了语法,但无法弄清楚它应该做什么。不过我可以再看看。
-
一个老问题,但这可能对stackoverflow.com/a/51144177/4241780有帮助,它展示了如何在编织时将工作目录设置为主项目文件夹。