【R】Projectとrenvを使って手軽に分析環境を保存する

2022-12-29

データ分析にとても役立つ「R」ですが、使っている間にR自体のバージョンやパッケージ(ライブラリ)のバージョンが変わることがよくあります。

通常ではパッケージのインストールフォルダが共通のため、新しいパッケージをインストールする際に依存しているパッケージが「気付かずに」アップデートされることもしばしば起こります。

論文に記載するパッケージのバージョンが分析と投稿までの間に変わっていた事もあります...。

他にも、本番環境と開発環境のRバージョンが異なると、開発環境で追加した機能の依存パッケージがインストールできなくなる場合も出てきます。

そんな状況を防ぐために、ここではRStudioのProjectとrenvを使って分析環境を保存する方法を説明しています。

RStudio – Project

RstudioはRの統合開発環境(IDE)で、Rに関わるファイル、関数、変数、パッケージ、図などを管理することができます。

中でもプロジェクト(Project)機能では、.Rprofileもプロジェクト毎に作成・読み込みされるため分析で必要になるファイルをまとめるだけでなくワーキングディレクトリや履歴も一緒に保存してくれます。

renv

renvは、Rstudioが開発しているRのパッケージ管理システムです。

使い方をまとめて下さっていたので、仕組みやコマンドはリンクをご覧ください。

Project + renv

Rstudioでプロジェクトを作成する際に「Use renv with this project」にチェックを入れると、renvを使ってプロジェクトが管理されます。

使い方のイメージでは、Pythonのvenvと同じような感覚で使う事ができます。

この際、renv自体がインストールされていない場合はインストールするか聞かれるため、「はい」を選んでインストールして下さい。

プロジェクト作成時に、Rのバージョンとrenvのバージョンが記録されたrenv.lockが作成されます。

{
  "R": {
    "Version": "4.2.2",
    "Repositories": [
      {
        "Name": "CRAN",
        "URL": "https://cran.rstudio.com"
      }
    ]
  },
  "Packages": {
    "renv": {
      "Package": "renv",
      "Version": "0.16.0",
      "Source": "Repository",
      "Repository": "CRAN",
      "Hash": "c9e8442ab69bc21c9697ecf856c1e6c7",
      "Requirements": []
    }
  }
}

renv.lockは明示的に更新する必要があるため、必要なパッケージのインストールが終わった時点で renv::snapshot()でrenv.lockを更新します。

例)Rcmdrのインストール後

インストールされたパッケージとバージョンが記録されています。

{
  "R": {
    "Version": "4.2.2",
    "Repositories": [
      {
        "Name": "CRAN",
        "URL": "https://cran.rstudio.com"
      }
    ]
  },
  "Packages": {
    "DBI": {
      "Package": "DBI",
      "Version": "1.1.3",
      "Source": "Repository",
      "Repository": "CRAN",
      "Hash": "b2866e62bab9378c3cc9476a1954226b",
      "Requirements": []
    },
    "Formula": {
      "Package": "Formula",
      "Version": "1.2-4",
      "Source": "Repository",
      "Repository": "CRAN",
      "Hash": "cc8c8c4d61346cde1ca60030ff9c241f",
      "Requirements": []
    },
    "Hmisc": {
      "Package": "Hmisc",
      "Version": "4.7-2",
      "Source": "Repository",
      "Repository": "CRAN",
      "Hash": "38d81aab48fd9587c47c8dd20d8498cd",
      "Requirements": [
        "Formula",
        "base64enc",
        "cluster",
        "data.table",
        "foreign",
        "ggplot2",
        "gridExtra",
        "gtable",
        "htmlTable",
        "htmltools",
        "lattice",
        "latticeExtra",
        "nnet",
        "rpart",
        "survival",
        "viridis"
      ]
    },
以下略

便利な点

分析・解析当時の環境を保存できる

renv.lockにRとパッケージのバージョンが記録されている上、プロジェクトフォルダ内には記録されているバージョンのパッケージがインストールされているので、他のプロジェクトの影響を受けずに分析環境が保存されています。

記録されているバージョンと実行環境のバージョンが違うとメッセージが表示されます。

環境を合わせるために古いバージョンのRを使う場合は、RStudioのGlobal optionから変更して下さい。

以前のバージョンのパッケージも簡単にインストール

CRANから以前のバージョンのパッケージを個別にインストールすることもできますが、依存関係のあるパッケージも順次インストールが必要になるので少々手間がかかります。

renvではソースからコンパイルしてインストールされるので、古いバージョンのRから追加のパッケージをインストールする場合でも簡単にインストールできます(問題が起きる時もあります)。

ただし、コンパイルにはRtoolsが必要になるので、バージョンに合ったRtoolsをインストールしてください。

注意点

renv.lockの更新には注意

renv.lockの内容が変更されると当然保存される環境も変わるため、特に追加の分析・解析の場合は元の環境が変わらないようにプロジェクトフォルダを分ける、renv.lockのバージョン管理等が必要になります。

完全に環境を切り分けるにはコンテナや仮想環境

簡単に分析環境の保存ができるProjectとrenvですが、あくまで一定の条件で保存できるレベルです。

操作ミスで保存されている環境が変更される事もあるため、完全に同一環境で保存したい場合は分析環境別のコンテナ作成等、運用以外の技術的な方法を導入して下さい。

また、あくまで「環境を保存する」事が目的ですので、「特定のバージョンで環境を構築する」事は難しい場合もあります。

分析環境renv,Rstudio

Posted by ううら