我有一个项目文件夹,这是我的工作目录.我们称之为项目.根据该项目的文件夹中有4个子目录: code,data,figures,和documents.
我想把我的.Rmd文件放在code子目录中.我希望这些数字进入figures子目录.我想.html,.md和.docx文件(S),以进入documents子目录.我想从data子目录中读取我的数据.这种组织结构是否可行?我似乎无法让它发挥作用.
我从这开始设置工作目录,project因为我知道knitr查找带有该.Rmd文件的文件夹,并将其视为工作目录(如果未指定).
```{r setglobal, cache = FALSE, include = TRUE}
library(knitr)
opts_knit$set(root.dir = "..")
```
Run Code Online (Sandbox Code Playgroud)
然后我尝试设置相对于工作目录的图形路径.
```{r setchunk, cache=FALSE, include=TRUE}
opts_chunk$set(fig.path = "./figures/")
getwd()
```
Run Code Online (Sandbox Code Playgroud)
工作目录正确报告为project.从data子目录中正确读取数据.正确呈现所有输出并运行所有代码.
```{r readdata}
crctx <- readRDS("./data/crctx.rds")
getwd()
*run lots of analyses here*
```
Run Code Online (Sandbox Code Playgroud)
但这些数字最终会出现在project/code/figures目录中而不是project/figures.
我也试过设置,base.dir但似乎没有改变任何东西.我添加了参数
base.dir = "./figures"
Run Code Online (Sandbox Code Playgroud)
到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子目录,现在可以使用"./data"它来访问代码.但是,全局设置不适用于数字输出.因此,正确的规范是opts_chunk$set(fig.path = "../figures/")- 使用../而不是./.我认为Richie Cotton解决了这个问题,我暂时没有看到它.
我还用码头OSX以创建符号链接project/documents到project/code/figure其默认情况下,通过knitr创建.有了这个,knitr会查找到正确的子子目录,但一切都结束了projects/documents.这非常有效.我不能让R使用file.symlink正确创建符号链接.但它在终端中运行良好.去搞清楚.
更新2:
我也得到了输出文件.您必须直接使用编织命令.正文如下.
Knitr代码用于在代码/分析中使用.Rmd编织markdown文档并在输出/报告中输出:
knit("./code/knitr_file.Rmd", "./documents/knitr_output.md”)
将.md文件转换为.docx的Pandoc代码 - 使用与.md文件相同的文件夹
pandoc("./documents/knitr_output.md", format = "docx”)
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
试试这个.它假设您在工作目录中列出了4个文件夹project.它还假定你有一个.csv名为文件myData.csv在data.
编织文件时,图表将保存在figures.最后,代码查找html文件code并将其移动到documents.可能有更好的方法来做到这一点.
```{r setup}
library(knitr)
opts_knit$set(root.dir=normalizePath('../'))
opts_chunk$set(fig.path = "../figures/", dev='pdf') # corrected path and added dev
```
```{r import}
dat <- read.csv("data/myData.csv")
```
```{r plot}
# pdf(file="figures/test.pdf") # I do this in setup instead
plot(dat)
# dev.off()
```
```{r move}
files <- list.files("code/")
index <- grep("html", files)
file.rename(file.path("code", files[index]),
file.path("documents", files[index]))
```
Run Code Online (Sandbox Code Playgroud)