9
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

RAdvent Calendar 2017

Day 15

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

Last updated at Posted at 2017-11-24

オフライン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...."の箇所が特に面倒だなと個人的に思ってました。
(ダウンロードした時のコンソールから矩形で該当部分切り取るなど)

アプリで自動化

image.png

入力:必要なパッケージ, パッケージをダウンロードするフォルダへの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推奨)

image.png

1.1 ガイドをクリック

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

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

image.png

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

image.png

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

image.png

5.ダウンロード実行

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

image.png

image.png

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

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

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

image.png
… (略)
image.png

これをコピペしてスクリプトとして保存しておくと、
オフライン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で全てが解決する話だなと思います。

9
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?