Rmarkdown のデフォルトパスを .Rproj からのパスに設定する


Rmarkdownのデフォルトパスについて

.Rmd ファイルをサブディレクトリで管理していると、外部ファイルへのパス指定で戸惑うことがあります。デフォルトでは、Rチャンク(chunk)の作業ディレクトリは、.Rmdファイルのあるディレクトリになります。つまり、チャンク内で外部ファイルを参照する場合、これらのパスが.Rmdファイルのディレクトリに対する相対パスであることを知っておく必要があります。

解決法

プロジェクトで管理している場合は、
{r setup, include=FALSE}knitr::opts_knit$set(root.dir = rprojroot::find_rstudio_root_file())を入れると、すべてのチャンクでの相対パスを、.Rprojからの相対パスに設定できます。

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

補足

作業ディレクトリを変更する通常の方法はsetwd() ですが、R Markdownでは setwd() は永続的ではなく、次のチャンクではデフォルトパスに戻るようになっています。全てのチャンクの作業ディレクトリを変更したい場合は、{r, setup}チャンクで設定することが必要なようです。

これは、.htmlファイルと同様に、Rmdファイルからの相対パスにしておけば、.Rmdファイルとその参照ファイルをどこにでも自由に移動させることができるといった利点もあることから、デフォルトパスがRmdファイルからの相対パスになっているようです。

参考

  1. Riederer YX Christophe Dervieux, Emily. 16.6 The Working Directory for R Code Chunks | R Markdown Cookbook. Accessed November 1, 2020. https://bookdown.org/yihui/rmarkdown-cookbook/working-directory.html
  2. r - Setting work directory in knitr using opts_chunk$set(root.dir = ...) doesn’t work. Stack Overflow. Accessed November 1, 2020. https://stackoverflow.com/questions/30237310/setting-work-directory-in-knitr-using-opts-chunksetroot-dir-doesnt-wor