Setting work directory in knitr using opts_chunk$set(root.dir = …) doesn't work

匿名 (未验证) 提交于 2019-12-03 03:05:02

问题:

My R project is structured like a package with directories /R, /vignettes, /data etc. In one of my Rmd docs in /vignettes I source a script which in located in /R. Inside this script I use read.csv() to load a file located in inst/extdata/.
The problem now is that by default the working directory inside the Rmd file is the directory where the file is located. Let's call it /Users/Me/Docs/Proj/vignettes. However in order for the R script to run the working directory needs to be the project's main directory (/Users/Me/Docs/Proj).
I tried to change the working directory in the Rmd file using knitr::opts_chunk$set(root.dir = normalizePath(".."). However apparently this doesn't change the working directory since if I call getwd() after it the output is still /Users/Me/Docs/Proj/vignettes whereas knitr::chunk_opts$get("root_dir") returns /Users/Me/Docs/Proj.

Here is a minimal example Rmd file:

```{r} getwd()  # returns 'Users/Me/Docs/Proj/vignettes' knitr::opts_chunk$set(root.dir = normalizePath(".."))  # should change the working directory to 'Users/Me/Docs/Proj' getwd()  # again returns 'Users/Me/Docs/Proj/vignettes' knitr::opts_chunk$get("root.dir")  # returns 'Users/Me/Docs/Proj' ``` 

I am using RStudio Version 0.99.435. Here is my session Info:

R version 3.2.0 (2015-04-16)   Platform: x86_64-apple-darwin14.3.0 (64-bit)   Running under: OS X 10.10.3 (Yosemite)    locale: [1] de_DE.UTF-8/de_DE.UTF-8/de_DE.UTF-8/C/de_DE.UTF-8/de_DE.UTF-8  attached base packages: [1] stats     graphics  grDevices utils     datasets  methods   base       loaded via a namespace (and not attached): [1] htmltools_0.2.6 tools_3.2.0     yaml_2.1.13     rmarkdown_0.6.1 digest_0.6.8    

Any help is kindly appreciated. If you need more info post a comment to the question. Thanks in advance!

回答1:

It is knitr::opts_knit instead of knitr::opts_chunk.



回答2:

As Yihui has pointed out in his answer the mistake was simply that I used opts_chunk$set() instead of opts_knit$set().
However it might be worth noting that the change of the working directory affects not the current but only the next chunk. So e. g. if you want to load data relative to the new working directory do that in the following chunk.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!