在RStudio升级1.0.44后,opts_knit $ set(root.dir = path)不起作用

时间:2016-11-21 09:59:56

标签: r rstudio knitr working-directory

我升级到RStudio 1.0.44,似乎knitr :: opts_knit $ set(root.dir = path)其中path是我的目录不像以前那样工作。它抛出一条消息:

The working directory was changed to /... inside a notebook chunk. The working
directory will be reset when the chunk is finished running. Use the knitr
root.dir option in the setup chunk to change the the working directory for
notebook chunks.

此消息现在将出现在以下每个命令中。请注意,我还没有编织rmd。我只是在运行命令。通过setwd()直接在命令行中设置工作目录会返回getwd()中的正确路径,但是再次加载具有相对路径(./ ...)的文件将返回上面的消息。 RStudio 0.99.896完全相同的rmd工作正常。我错过了什么?

sessionInfo()

R version 3.3.0 (2016-05-03)  
Platform: x86_64-w64-mingw32/x64 (64-bit)  
>Running under: Windows 7 x64 (build 7601) Service Pack 1  

other attached packages:
[1] scales_0.4.0     ggplot2_2.1.0    xtable_1.8-2     data.table_1.9.6  
[5] dplyr_0.4.3      knitr_1.15       pander_0.6.0 

6 个答案:

答案 0 :(得分:4)

您可以使用以下命令更改工作目录:

```{r "setup", include=FALSE}
knitr::opts_knit$set(root.dir = getwd())  # with something else than `getwd()`
```

rmarkdown网站dedicated page底部所述。

Restart R and run all chunks(可在"运行>" RStudio中的标签中找到)修复了我机器上的同样问题。

这有帮助吗?

答案 1 :(得分:1)

据我所知,rmd文件的行为在新的rstudio中发生了变化。只通过ctrl + r在一个块中运行一行将导致OPs问题中描述的消息。而是按键组合ctrl + shift + enter导致执行特定的块。所以我似乎无法在rmd中运行单行并将其输出写入控制台。

答案 2 :(得分:1)

我将我的Rmd文件放在doc/file.rmd和R R/code.r中的R代码文件中,项目文件是当前文件夹.。当我编写Rmd文件时,knitr::opts_knit$set(root.dir = "..")不起作用,但seated("..")有效。

我发现我将source(R/code.r)放在与knitr::opts_knit$set(root.dir = "..")相同的第一个设置块中。那就是:

```{r "setup", include=FALSE}
knitr::opts_knit$set(root.dir = "..") 
source(R/code.r)
```

当我将它分成两个块时,它现在可以工作了。那就是:

```{r "setup", include=FALSE}
knitr::opts_knit$set(root.dir = "..")
```

```{r "source"}
source(R/code.r)
```

我不确定这是不是你的问题。我把它放在这里以防万一有人或将来自己也犯了同样的愚蠢错误。

答案 3 :(得分:1)

我也遇到了这种行为。 修复方法是使用normalizePath()

```{r setup, include=FALSE}
knitr::opts_knit$set(root.dir = normalizePath(".."))
```

修改

事实证明这不是解决方法。但是,由于谷歌搜索中出现了很多,我终于发现你设置knitr参数的大块必须运行你的代码。

您应该从其他块中获取脚本。这将解决问题。

记录在案here

答案 4 :(得分:0)

enter image description here

您也可以从菜单工具->全局选项-> R Markdown中选择工作目录。并将“评估目录中的块”更改为与Rproj所在的目录相同。这适用于我的Mac版Rstudio V1.3.1093。

https://bookdown.org/yihui/rmarkdown-cookbook/working-directory.html

答案 5 :(得分:-1)

我没有足够的声誉发表评论,否则我会对@philsf 的回答发表评论。

我结合了@Chunhui Gu 和@philsf 对我的问题的回答。我使用的是 RStudio 版本 1.3.1093。

在检查我的 wd (getwd()) 和查看正确的项目目录方面,我和 OP 有同样的困惑,但是在我编织时让 Markdown 显示了不同的目录。此外,我将不得不更改一个“。”使用 cmd-enter (mac) 在编织和运行代码之间切换时,所有文件路径中的“..”。

我的设置:首先,我将工具 > 全局选项 > R Markdown 设置更改为“评估目录中的块”,但我还包含了 normalizePath() 块选项,认为这会有所帮助。

    ```{r setup, include=FALSE}
knitr::opts_knit$set(root.dir = normalizePath(".."))
```

根据@philsf,我把这个大块去掉了,现在这些路径在编织和运行 cmd-enter 时起作用了。

我怀疑 normalizePath() 设置块在较旧的 RStudio 版本 (?) 中很有帮助,或者 R Markdown >“评估目录中的块”选项可能一直存在,我才刚刚发现它。希望这能帮助遇到同样令人沮丧的问题的其他人。