我有一个项目文件夹,这是我的工作目录。我们称之为项目。在项目文件夹下有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中使用Terminal来创建从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
答案 0 :(得分:8)
试试这个。它假设您在工作目录project
中列出了4个文件夹。它还假设您在.csv
中有一个名为myData.csv
的{{1}}文件。
编织文件时,图表将保存在data
中。最后,代码会在figures
中查找html
个文件,并将其移至code
。可能有更好的方法来做到这一点。
documents
答案 1 :(得分:0)
我使用这种方法。将它放在rmd文件的开头,您将能够在线使用运行代码并使用RStudio项目设置。诀窍是将knitr主目录重置为你的项目目录(我的项目目录中有几个,因此&#39; /../../'但你得到了这个想法)。您还需要重置数字和缓存路径,否则输出将在奇怪的地方结束。
如果您使用下面的设置,您可以根据项目需要创建正确的文件结构。
```{r setup, include=FALSE}
###--- Update the knitr working directory (R works from the project folder, knitr works in the rmd folder)
dd <- getwd()
knitr::opts_knit$set(root.dir= paste(dd,'/../../'))
###--- Set some knitr defaults for all of the code blocks below.
knitr::opts_chunk$set(warning=FALSE
,error=FALSE
,message=FALSE
,cache=F
,eval=TRUE
,results='asis'
,echo=TRUE
,fig.ext="png"
,cache.path = paste0(dd,'/cache/')
,fig.path = paste0(dd,'/figures/')
)
```