Установка рабочего каталога в knitr с помощью opts_chunk $set (root.dir =...) не работает

Мой проект R структурирован как пакет с каталогами /R, /vignettes, /data и т.д. В одном из моих документов Rmd в /vignettes я исхожу из script, который находится в /R. Внутри этого script я использую read.csv() для загрузки файла, расположенного в inst/extdata/.
Проблема в том, что по умолчанию рабочий каталог внутри файла Rmd является каталогом, в котором находится файл. Позвольте называть его /Users/Me/Docs/Proj/vignettes. Однако для запуска R script рабочим каталогом должен быть основной каталог проекта (/Users/Me/Docs/Proj).
Я попытался изменить рабочий каталог в файле Rmd с помощью knitr::opts_chunk$set(root.dir = normalizePath(".."). Однако, по-видимому, это не меняет рабочий каталог, поскольку, если я вызываю getwd(), после него вывод все еще /Users/Me/Docs/Proj/vignettes, тогда как knitr::chunk_opts$get("root_dir") возвращает /Users/Me/Docs/Proj.

Вот минимальный пример файла Rmd:

```{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'
```

Я использую RStudio версии 0.99.435. Вот моя сессия Информация:

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   

Любую помощь любезно оценивают. Если вам нужна дополнительная информация, разместите комментарий к вопросу. Спасибо заранее!

Ответ 2

Как Yihui указал в своем ответе, ошибка была просто в том, что я использовал opts_chunk$set() вместо opts_knit$set().
Однако, возможно, стоит отметить, что изменение рабочего каталога влияет не на текущий, а только на следующий фрагмент. Итак, e. г. если вы хотите загрузить данные относительно нового рабочего каталога, сделайте это в следующем фрагменте.

Ответ 3

Если у вас есть проект R с вложенными подпапками, так что файлы.Rproj и.Rmd расположены в разных папках, вы можете использовать команду rprojroot::find_rstudio_root_file() чтобы найти и установить рабочий каталог в основную папку проекта во время Kniting (вместо папки, содержащей файл кода rMarkdown).

Поэтому, как минимум, используйте следующее:

'''{r setup}

knitr::opts_knit$set(root.dir = rprojroot::find_rstudio_root_file())

'''

внутри setup фрагмента.

См. Также Автоматическое определение пути текущего проекта R в R Studio и https://support.rstudio.com/hc/en-us/community/posts/220826588-Working-directory-in-R-Notebooks.