在Rmarkdown中的交互式(Rstudio)和非交互式(knitr)使用中设置工作目录

时间:2019-02-05 14:08:56

标签: r rstudio r-markdown

我正在开发一个通用管道,该管道将跨多个项目运行,并且希望使用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工作目录而不是Rmd的位置作为工作目录,在Rstudio上针对示例数据集以交互方式开发报告,并且对于以后的数据集,可以使用脚本命令和使用当前目录作为工作目录,而无需更改任何代码。

我可以通过添加类似以下内容来完成第一部分:

```{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中的源目录。

0 个答案:

没有答案