Ответ 1
Это knitr::opts_knit
вместо knitr::opts_chunk
.
Мой проект 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
Любую помощь любезно оценивают. Если вам нужна дополнительная информация, разместите комментарий к вопросу. Спасибо заранее!
Это knitr::opts_knit
вместо knitr::opts_chunk
.
Как Yihui указал в своем ответе, ошибка была просто в том, что я использовал opts_chunk$set()
вместо opts_knit$set()
.
Однако, возможно, стоит отметить, что изменение рабочего каталога влияет не на текущий, а только на следующий фрагмент. Итак, e. г. если вы хотите загрузить данные относительно нового рабочего каталога, сделайте это в следующем фрагменте.
Если у вас есть проект 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.