Rmarkdownのデフォルトパスについて
Rmarkdown (.Rmd)ファイルをサブディレクトリで管理していると、外部ファイルへのパス指定で戸惑うことがあります。デフォルトでは、Rチャンク(chunk)の作業ディレクトリは、.Rmdファイルのあるディレクトリになります。つまり、チャンク内で外部ファイルを参照する場合は、.Rmdファイルのディレクトリに対する相対パスであることを知っておく必要があります。
解決法
プロジェクト(.Rproj)で管理している場合は、{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())
```
Code language: PHP (php)
補足
作業ディレクトリを変更する通常の方法を、.Rprojか、R Markdownでは setwd() は永続的ではなく、次のチャンクではデフォルトパスに戻るようになっています。全てのチャンクの作業ディレクトリを変更したい場合R Markdownでは setwd() は
これは、.htmlファイルと同様に、Rmdファイルからの相対パスにしておけば、.Rmdファイルとその参照ファイルをどこにでも自由に移動させることができるといった利点もあることから、デフォルトパスがRmdファイルからの相対パスになっているようです。
.Rproj に依存せずファイル構造を保てることは利点でもありますが、使いづらいと感じる場面も出てくると思います。最初から .Rmd を使う場合は、① .Rpoj と同じ階層で管理をするか、②上記のディレクトリパスを設定するか、③相対パスのまま作業するか、3択の中から選択することになると思いますが、自分の目的にあった使い方で良いかと思っています。
また、プロジェクトで管理する場合は、GitHubで連携しながらバージョン管理することをおすすめします。最初の設定は面倒かもしれませんが、将来への自分への投資と思ってしています。こちらの記事もご参照ください。
参考
- 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
- 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
ピンバック: よく使うR小技集(随時更新) - shoei05