Я работаю над общим конвейером, который будет работать во многих проектах, и хотел бы использовать записные книжки Rmarkdown для генерации окончательных отчетов.
Так что моя структура каталогов может выглядеть примерно так:
/home/user/devel/pipelines/
| - pipeline1/
| - pipeline2/
| - pipeline3/
| - .git
| - default_configuration.ini
| - processing_pipeline.py
| - report.Rmd
/cluster/lustre/projects/
| - project1/
| - project2/
| - project3/
| - data/
| - pipeline1_results/
| - pipeline2_results/
| - pipeline3_results/
| - configuration.ini
| - results.tsv.gz
| - results... [VARIOUS ANALYSIS PRODUCTS]
| - [finished report will go here]....
В идеальном мире я хотел бы сохранить исходный код Rmarkdown в каталоге devel
под контролем версий.Я хотел бы разработать отчет в Rstudio в интерактивном режиме на примере набора данных, используя рабочий каталог Rstudio, а не местоположение Rmd
в качестве рабочего каталога, и для будущих наборов данных его нужно связать с помощью команды сценария и использовать командутекущий каталог как рабочий каталог без изменения какого-либо кода.
Я могу дополнить первую часть, добавив что-то вроде:
```{r setup}
knitr::opts_knit$set(root.dir="/cluster/lusture/projects/project3/pipeline3/")
```
Но теперь я жестко запрограммировал ноутбук для работы в определенном каталоге, а не только в любом рабочем каталогеR сеанс, так что это терпит неудачу, когда я хочу запустить на другом проекте (вероятно, вязание в пакетном режиме).
Я могу выполнить последнюю часть, выполнив мой конвейер что-то вроде:
Rscript -e 'library(rmarkdown);
opts_knit$set(root.dir = ".");
render("/path/to/source/report.Rmd")'
в каталоге анализа.Но это не работает для интерактивного сеанса.
Я бы также хотел, чтобы report.Rmd попытался загрузить configuration.ini
из текущего каталога, и, если он не существует, загрузить его из исходного каталога.Но я не знаю, как получить исходный каталог в Rmd таким образом, чтобы он работал как в интерактивных сеансах, так и при вязании.