📦
R/RStudioでyamlファイルを使ってパッケージ管理をしてみる
概要
RStudioでProjectを利用してコーディングを進める際に,パッケージ管理をシンプルにしたいというモチベーションで,
今回はyaml
でパッケージ管理を外出ししてみました.
Rでyamlを扱う
Rではデフォルトでyamlファイルを扱う関数は提供されていないので,ここではyaml
パッケージを使います.
本末転倒ですが,yaml
をインストール・インポートする処理だけは.Rprofile
に記述しておきます.
options(repos="https://cran.ism.ac.jp/")
require(utils)
force_library <- function(pkg){
if(!require(pkg, character.only = T)){
install.packages(pkg)
require(pkg, character.only = T)
}
}
force_library("yaml")
また,yamlのファイル名はconfig.yaml
としました.
yaml側
ここでは,以下の3つのパッケージを自動で読み込みたいとします.
packages:
- tidyverse
- tidymodels
- ranger
読み込み処理
yaml::read_yaml()
でyamlファイルを読み込むと,以下のようにリスト形式のオブジェクトが生成されます.
> read_yaml("config.yaml")
$packages
[1] "tidyverse" "tidymodels" "ranger"
あとは.Rprofile
に逐次読み込み処理を追記していくだけです.
options(repos="https://cran.ism.ac.jp/")
require(utils)
force_library <- function(pkg){
if(!require(pkg, character.only = T)){
install.packages(pkg)
require(pkg, character.only = T)
}
}
force_library("yaml")
# ここから追記
config <- read_yaml("config.yaml")
for(pkg in config$packages){
force_library(pkg)
}
終わりに
- yamlの方が編集がしやすいと思いました.
-
write_yaml
関数を使って現在の設定を書き出すのもあり - yamlにバージョンも追記してあればそれを読み込む,みたいなカスタマイズもありですね
Discussion
直接関係はないですが、bigrqueryを利用してbq_auth()などの認証を行う場合,.Rprofileに記述してプロジェクトの起動直後に行うと,RNotebook内のグラフ出力でエラーが出るケースがありました。
ニッチなケースですが、bigrqueryを利用する場合は.Rprofileの外で読み込みを行う方が良さそうです。