トップ 履歴 一覧 Farm ソース 検索 ヘルプ RSS ログイン

miniCRANによるRパッケージのオフラインインストール


キーワード

最終更新時間:2019年01月07日 22時21分02秒
アフィリエイト・広告について
プライバシーポリシー

はじめに

データ分析の専門家など、先進的な環境で働いている方にはイメージしにくいかもしれませんが、一般的な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言語を学ぶための参考書籍リスト

カテゴリ: [R,データ分析]


  • [1]独自パッケージ、関数との兼ね合いで特定のバージョンを導入しなければならないなど。