在RStudio/RMarkdown中,如何设置工作目录(setwd)?

51

setwd 在 RStudio 中的 Rmd 文件中似乎无法更改后续块中的目录。是否有一种方法可以永久设置工作目录?

示例:

```{r}
setwd("/tmp")
getwd()
```

```{r}
getwd()
```

输出:

setwd("/tmp")
getwd()
## [1] "/private/tmp"

getwd()
## [1] "/Users/me/src"

我正在使用Mac OS 10.8.5,RStudio 0.97.551版本,R版本为3.0.2,knitr版本为1.5。

我希望设置目录以供后续的所有代码块使用。


3
我认为这是一个knitr的问题。请参考https://github.com/yihui/knitr/issues/277#issuecomment-6528846,看看它是否有帮助,尽管我认为[Yihui不赞成](https://groups.google.com/forum/#!topic/knitr/knM0VWoexT0)全局设置`setwd`。 - Tyler Rinker
1
解决方案在这里,请使用opts_knit而不是opts_chunk。 - Nate Breznau
2个回答

51

请参阅Issue #277以及有关背景的进一步说明,请查看该软件包作者的评论此处

你要查找的是knitr::opts_knit中的root.dir选项。

以下内容将设置后续代码块(但不包括此代码块)的根目录:

```{r setup}
knitr::opts_knit$set(root.dir = '/tmp')
```

编辑:RStudio 1.0.44

截至RStudio的最新版本(2016年10月/11月),需要以下代码片段才能进行knitr的render默认操作:

```{r setup}
knitr::opts_knit$set(root.dir = '/tmp')
```

请查看下面Etienne关于版本的评论。


6
我需要使用 opts_knit 而不是 opts_chunk。提示:opts_knit 和 opts_chunk 是 R 语言中控制代码块输出的选项。 - Etienne Low-Décarie
我也需要使用 opts_knit -- 这可能取决于您是否使用 rmarkdown :: renderknitr :: knit,我正在使用前者(这是2016年RStudio的knit HTML按钮的默认设置) - arvi1000
3
这适用于Linux上的RStudio 1.0.143,但仅限于{r setup}...块中。将其称为{r initialization}...会导致错误。 - mightypile
6
对我来说这行不起作用:运行此行代码并随后输入 getwd(),结果显示该代码块的工作目录未受影响。操作系统为 Mac OS 10.11.6,R 版本为 3.3.1,knitr 版本为 1.17。 - eric_kernfeld
奇怪...我在RStudio Windows 1.1.456中,它似乎想要使用“chunk”而不是“knit”。 - Hack-R

3

以下是我一直在使用的内容,当使用R项目(.Rproj文件)时似乎运作良好:

knitr::opts_chunk$set(
    # This should allow Rmarkdown to locate the data
    root.dir = rprojroot::find_rstudio_root_file()
)

+1 我仍然需要通过 setwd 显式设置,所以 setwd(rprojroot::find_rstudio_root_file()) 起作用了。你有什么想法为什么通过 knitr::opts_chunk$set 的方式没有起作用? - user63230

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接