オフラインPCにパッケージを導入するのはすこし面倒
- 以下の数行が必要
install.packages("miniCRAN")
library(miniCRAN)
# 必要なパッケージをリスト
pkglist <- pkgDep("packagename")
# パッケージを特定のディレクトリにダウンロード
## win ---
download.packages(pkglist, destdir = "path_to_dir", type = "win.binary")
## mac ---
download.packages(pkglist, destdir = "path_to_dir", type = "source")
- 導入先PCにインストールするために以下のコードも必要
# win
install.packages( c("path_to_downloaded_file/packagename.zip",
"path_to_downloaded_file/packagename2.zip",
"path_to_downloaded_file/packagename3.zip",
"path_to_downloaded_file/packagename4.zip",
"..."),
repos = NULL, conrib.url="win.binary", type = "win.binary")
# mac
install.packages( c("path_to_downloaded_file/packagename.tar.gz",
"path_to_downloaded_file/packagename2.tar.gz",
"path_to_downloaded_file/packagename3.tar.gz",
"path_to_downloaded_file/packagename4.tar.gz",
"..."),
repos = NULL, type = 'source')
- すこし面倒
"path_to_downloaded_file/packagename...."
の箇所が特に面倒だなと個人的に思ってました。
(ダウンロードした時のコンソールから矩形で該当部分切り取るなど)
アプリで自動化
入力:必要なパッケージ, パッケージをダウンロードするフォルダへのpath
出力:オフラインPCでのインストールに必要なコード
## 使い方
0.アプリの依存パッケージを導入
dynamic_require <- function(package){
if(eval(parse(text=paste("require(",package,")"))))return(TRUE)
install.packages(package)
return(eval(parse(text=paste("require(",package,")"))))
}
dynamic_require(c("dplyr","shiny","rintrojs","miniCRAN","shinymaterial"))
1.アプリを起動 (Open in Browser推奨)
1.1 ガイドをクリック
2.パッケージを入力 (ダブルクォート、スペースなし)
3.オフラインPCのOSを選択
4.パッケージファイルのダウンロード先を指定
5.ダウンロード実行
指定したフォルダにパッケージがダウンロードされていきます。
インストール用のコードを取得
これをコピペしてスクリプトとして保存しておくと、
オフラインPCでパッケージを導入するときに少しだけ作業が楽になると思います!
まとめ
オフラインPCへのパッケージ導入を支援できればと思って作りました。
勉強にはなりましたが、作り終わった後にインフラ屋さんのためのR言語: 環境構築編にある以下の記述をみて、そっちのほうが楽だなと思いました。
正式な方法かどうかは分かりませんが、手っ取り早い方法としては...
Windows版にパッケージをインストールすると、Rインストールディレクトリ下のlibraryディレクトリにそのパッケージ関連のファイルが展開されます。
なので、Webに接続できるマシン上で必要なパッケージを一通りインストールしてあげて、libraryディレクトリ以下をまるごとzipで固めて対象マシンに持っていって、ディレクトリ毎置き換えてあげます。
とりあえずそれでうまくいってます。
アプリのソースコードはgithubに置きました。
もしよろしければダウンロードして使ってみてください。
実際のパッケージDLはできませんが、アプリの起動だけであれば以下のコードでできると思います、
イメージとして参考にしてください。
library(shiny)
runGitHub(repo = "DownloadRPackages", username = "sasakiK")
参考
Rオフラインでのパッケージインストール
インフラ屋さんのためのR言語: 環境構築編
elegant-way-to-check-for-missing-packages-and-install-them
2018.06 振り返って考えてみるとDockerで全てが解決する話だなと思います。