読者です 読者をやめる 読者になる 読者になる

データサイエ「ソ」ティストは語る

データサイエンティストではない、パチもんのデータサイエ「ソ」ティストのブログ

miniCRANパッケージを使ってパッケージをオフラインインストールする

R

いつも自分でしゃべっていて、「検索したらヒントが出てきますよ」と言っているのだけど、参照先がうまく紹介できないので、研修のネタ帳として。

オフラインのパソコンでRを使う

データ分析を専門にしている方からすると信じられないかもしれないが、一般的なIT企業や官公庁ではいろいろセキュリティが厳しいので、限られたパソコンしかインターネットに接続できないことが多い(らしい。お客さんと話をすると)。

特に、「分析したくなる」データを扱うようなパソコンは、尚更ネットには繋げないかもしれない。

そのようなオフラインのパソコンでRを使いたいとき、問題になるのはパッケージの導入である。Rは、まぁ最初にCDか何かでインストーラを持ち込めばよいが、その後必要に応じてパッケージを導入したいときに、 install.packages が使えないのは不便だ。特に、依存関係を手動で解決しなければならない、というのが困難だ。

解決すべき課題

  1. パッケージを install.packages を使わずにインストールする
  2. その際に必要な依存関係を解決する
  3. (パッケージのバージョン管理、更新を行う)

このうち1. については、WindowsのRであればメニューバーの[パッケージ]-[ローカルにあるzipファイルからのパッケージのインストール]を選択し、ダウンロードしたパッケージのzipファイルを指定すればよい。Ctrl-aで複数のzipファイルをまとめて選択することもできる。

f:id:data_sciesotist:20150324004258p:plain

もうひとつの2. が課題で、CRANのページを目で見て、関係するパッケージを手でダウンロードしていくのは非常に困難だ。3. については、とりあえず所望の分析ができれば古くてもよかろう、ということで今回は考えない。

解決策

パッケージの依存関係を解決して手動でインストールするために、{miniCRAN}パッケージを用いる。また、どうしてもCRANの情報を参照する必要があるため、最低1台はネットにつながるパソコンが必要だ。

{miniCRAN}パッケージのインストール

ネットにつながるパソコンで、{miniCRAN}パッケージをインストールする。

 install.packages("miniCRAN")

オフラインで使用したいパッケージをリストアップする

なんでもよいが、ここでは項目反応理論のための{ltm}パッケージを選んだとする。

ltmパッケージの依存関係をpkgDep関数で調べる

{miniCRAN}パッケージを読み込み、 pkgDep 関数で{ltm}パッケージと依存関係にあるパッケージを調べる。結果を、適当な変数pkgsに格納する。

 require(miniCRAN)
 pkgs<-pkgDep("ltm")

pkgs変数の中身を見ると、{ltm}パッケージ自身を含めて10個のパッケージ名が格納されている。

 pkgs
 [1] "ltm" "MASS" "msm" "polycor" "survival"
 [6] "mvtnorm" "expm" "sfsmisc" "Matrix" "lattice"

これらのパッケージをダウンロードし、オフライン環境にインストールすれば、{ltm}パッケージが使えるようになる。

パッケージのダウンロード

パッケージのダウンロードには download.packages 関数を使う。先に、ダウンロードしたzipファイルを配置するフォルダを適当に作っておく。ここではR_pkgsフォルダとする。

 download.packages(pkgs,destdir="R_pkgs")

ダウンロードしたパッケージをオフライン環境に持っていく

CDに焼くとか、USBメモリにコピーするなどして、オフラインのパソコンにデータを持ち込む。あとは先程述べたように、メニューからzipファイルを指定してインストールすればよい。

まとめ

あまり意識していなかったが、一般の企業では思った以上にネットにつなげないコンピュータが多いことをRの研修を通じて知った。「パッケージを使いたかったら install.packages で簡単ですよ」と言ってきたが、そうもいかない環境があるらしい。そのような環境でパッケージの導入を行うためには、(ネットにつながるコンピュータで){miniCRAN}パッケージを用いて依存関係を調査し、download.packages 関数でファイルをダウンロードし、それを持ち込むという方法がある。