- はじめに
- Rにおけるパッケージのオフラインインストール
- 依存関係を考慮したパッケージのダウンロード
- miniCRANパッケージによる依存性の解決とダウンロード
- makeDepGraph関数による依存関係の可視化
- 注
■はじめに
データ分析の専門家など、先進的な環境で働いている方にはイメージしにくいかもしれませんが、一般的なIT企業や官公庁では、いろいろセキュリティが厳しく、限られたパソコンしかインターネットに接続できないことが多くあります。
画像はフリーで使えるWordで張り紙より借用したイメージです。
そのようなオフラインのパソコンでRを使いたいとき、問題になるのはパッケージの導入です。R自体は、インストーラをCDなどで持ち込めばインストールできますが、所望の分析を行うためのパッケージを導入したいときに、install.packages() 関数が利用できないのは不便です。パッケージを個別にダウンロードして持ち込もうにも、依存関係を手動で解決することは極めて困難です。
そこで、この記事ではオフライン環境に依存関係を解決してパッケージを導入するための方法として、miniCRAN パッケージの活用を紹介します。
■Rにおけるパッケージのオフラインインストール
一般に、Rにパッケージを導入するには、上記の通りinstall.packages 関数を使います。しかし、何らかの事情[1]でインターネット (CRAN / MRAN) 上の最新のパッケージではなく、独自に用意したパッケージのアーカイブ (zip, tar.gz) をインストールする場合があります。アーカイブからのパッケージインストールは、install.packages 関数の引数にファイル名を与えることで可能です。
# Windowsの場合 > install.packages("./pkgName_X.Y.Z.zip", type = "win.binary") # macOS, Linuxなどの場合 > install.packages("./pkgName_X.Y.Z.tar.gz", type = "source")
また、Windowsでは標準のRGuiから、メニュー操作でインストールすることもできます。
■依存関係を考慮したパッケージのダウンロード
上記のように、パッケージをダウンロードさえすれば、インストール自体は簡単です。問題は、依存関係を解決して「動く」状態のパッケージを揃えることです。Rのパッケージは、単体ですべての機能が完結しているものもありますが、一般に他の著名なパッケージの関数・機能を借用したり上書き (オーバーライド) して動作するものが多いです。つまり、「このパッケージを使うためにはそのパッケージが必要で、そのパッケージにはあのパッケージが必要で……」というように、芋づる式の依存関係が生じています。
パッケージ間の依存関係については、CRANの各パッケージのページで示されていますが、「該当パッケージ→他パッケージ」の一次の関係しかわかりません。「他パッケージ」がさらに依存関係にあるパッケージを調べるには、Webページを辿っていくしかありません。
一次の依存関係はわかるが、その先の依存関係についてはわからない
■miniCRANパッケージによる依存性の解決とダウンロード
そこで、本題ですがminiCRANというパッケージを使うと、指定したパッケージを動作させるのに必要な依存関係を解析し、導入すべきパッケージの一覧を作成してくれます。
■miniCRANパッケージのインストール
本記事の目的は、オフライン環境に持ち込むためのパッケージを、依存関係を満たして一式ダウンロードすることですので、少なくとも1台は、インターネットにつながったPCが必要です。そのPC上のRに、miniCRANパッケージをインストールします。miniCRANパッケージはCRANに登録されていますので、以下のようにしてインストールできます。
> install.packages("miniCRAN")
■miniCRANパッケージの読み込み
特別なことは何もないですが、library または require 関数で読み込みます。
> library(miniCRAN)
■pkgDep関数による依存関係の整理
miniCRAN パッケージでは、あるパッケージと依存関係にあるパッケージ群を調査し、整理するためのpkgDep 関数が提供されています。
> obj <- pkgDep("パッケージ名")
上記のようにすると、指定したパッケージと依存関係にあるパッケージの情報がベクトルで得られます。ここでは、上で画像として示した、twitteRパッケージを例とします。
> deps <- pkgDep("twitteR") > deps [1] "twitteR" "bit64" "rjson" "DBI" "httr" [6] "bit" "jsonlite" "mime" "curl" "openssl" [11] "R6" "blob" "memoise" "pkgconfig" "Rcpp" [16] "BH" "plogr" "prettyunits" "digest" "magrittr" [21] "assertthat" "RSQLite" "RMySQL"
このように、Webページに記載されている一次の依存関係だけでなく、その先の二次、三次の依存関係についても情報を得ることができます。
■download.packages関数によるパッケージのダウンロード
必要なパッケージの情報が得られたら、それらをまとめてダウンロードします。R標準の download.packages 関数の引数に、pkgDep 関数の結果を与えます。
# Windowsの場合 > download.packages(deps, type = "win.binary", destdir = "ダウンロード先フォルダ名") # macOS, Linuxなどの場合 > download.packages(deps, type = "source", destdir = "ダウンロード先ディレクトリ名")
このようにすることで、オフライン環境に持ち込むためのパッケージを入手できます。
■makeDepGraph関数による依存関係の可視化
実用性はあまり高くないかもしれませんが、miniCRAN パッケージの makeDepGraph 関数では、依存関係をグラフ (ネットワーク) 構造として表現できます。関数の実行結果を plot 関数に与えると、グラフ構造が描画されます。twitteR パッケージの依存関係は以下のようになります。
> pkgs_graph <- makeDepGraph("twitteR") > plot(pkgs_graph)
twitteR パッケージの依存関係
関連ページ: R言語を学ぶための参考書籍リスト
■注
- [1]独自パッケージ、関数との兼ね合いで特定のバージョンを導入しなければならないなど。