Edited at
RDay 15

【R】オフラインPCへのパッケージ導入をアプリで解決する

More than 1 year has passed since last update.


オフラインPCにパッケージを導入するのはすこし面倒


  • 以下の数行が必要


オンラインPCconsole.R

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にインストールするために以下のコードも必要


オフラインPCconsole.R



# 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.アプリの依存パッケージを導入


オンラインPCconsole.R

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 ガイドをクリック



rintrojsがイントロダクションしてくれます↓


2.パッケージを入力 (ダブルクォート、スペースなし)


3.オフラインPCのOSを選択


4.パッケージファイルのダウンロード先を指定


5.ダウンロード実行



clickするとダウンロード開始と終了をお知らせ





指定したフォルダにパッケージがダウンロードされていきます。


インストール用のコードを取得



clickするとコードが表示される



… (略)

これをコピペしてスクリプトとして保存しておくと、

オフラインPCでパッケージを導入するときに少しだけ作業が楽になると思います!


まとめ

オフラインPCへのパッケージ導入を支援できればと思って作りました。

勉強にはなりましたが、作り終わった後にインフラ屋さんのためのR言語: 環境構築編にある以下の記述をみて、そっちのほうが楽だなと思いました。


正式な方法かどうかは分かりませんが、手っ取り早い方法としては...

Windows版にパッケージをインストールすると、Rインストールディレクトリ下のlibraryディレクトリにそのパッケージ関連のファイルが展開されます。

なので、Webに接続できるマシン上で必要なパッケージを一通りインストールしてあげて、libraryディレクトリ以下をまるごとzipで固めて対象マシンに持っていって、ディレクトリ毎置き換えてあげます。

とりあえずそれでうまくいってます。


アプリのソースコードはgithubに置きました。

もしよろしければダウンロードして使ってみてください。

実際のパッケージDLはできませんが、アプリの起動だけであれば以下のコードでできると思います、

イメージとして参考にしてください。


console.R

library(shiny)

runGitHub(repo = "DownloadRPackages", username = "sasakiK")


参考

Rオフラインでのパッケージインストール

インフラ屋さんのためのR言語: 環境構築編

elegant-way-to-check-for-missing-packages-and-install-them

2018.06 振り返って考えてみるとDockerで全てが解決する話だなと思います。