📦

R/RStudioでyamlファイルを使ってパッケージ管理をしてみる

2023/01/06に公開1

概要

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

masayukeeeeemasayukeeeee

直接関係はないですが、bigrqueryを利用してbq_auth()などの認証を行う場合,.Rprofileに記述してプロジェクトの起動直後に行うと,RNotebook内のグラフ出力でエラーが出るケースがありました。

ニッチなケースですが、bigrqueryを利用する場合は.Rprofileの外で読み込みを行う方が良さそうです。