http://stkdev.hatenablog.com/entry/2017/02/12/204631
昔書いた記事のリライト版になります。
※Windowsでの動作を前提にしています。
Rのコードを配布したい
Rで書いたコードを配布する手段もだいぶ充実してきました。
- RInnoというライブラリの紹介記事
- Jupyter NoteでPythonとRを共存させる試み
など、様々なよい配布・共有手段があるなかで今回は、ポータブル版のRに全部突っ込んでR環境を丸々配布するという力技の紹介です。
Shinyアプリを配布してみる
アプリの準備
Shinyアプリを作成して、それをR環境のない人に配布する、ということを考えます。
まずはお手元の環境でShinyプロジェクトを作っておきましょう。
New Projectから選ぶだけ。そのまま動かすとサンプルが起動しますね。
コード追加
ページを閉じたときにRを終了させる記述を追加しておきます。
app.Rもしくはserver.Rのserver関数の部分を以下を追記します。
- 引数にsessionを追加
- session$onSessionEndedを追加
# Define server logic required to draw a histogram
server <- function(input, output, session) {
output$distPlot <- renderPlot({
# generate bins based on input$bins from ui.R
x <- faithful[, 2]
bins <- seq(min(x), max(x), length.out = input$bins + 1)
# draw the histogram with the specified number of bins
hist(x, breaks = bins, col = 'darkgray', border = 'white')
})
# セッション切れたときにRを終了させる
session$onSessionEnded(function(){
stopApp()
q("no")
})
}
R Portableの導入とライブラリインストール
元の記事から少し改善した部分です。
元記事では必要なライブラリを直接指定フォルダーにコピーする手順にしていますが、依存ライブラリを調べるのが面倒なので、自動でできるようにしましょう。
まず、R Portableをダウンロードします。
解凍し、./App/R-Portable/bin/x64/Rgui.exe
を実行します。
そこで.libPaths()
を実行します。
ライブラリはここにインストールされます。
> .libPaths()
[1] "C:/Users/[ユーザ名]/Documents/R/win-library/3.5"
[2] "[インストール先]/R-Portable/App/R-Portable/library"
こんな感じにローカル上のwin-libraryフォルダとR Portableフォルダ内のlibraryフォルダが設定されていると思います。
ここで、設定をR Portableのディレクトリのみになるよう書き換えます。
> .libPaths(.libPaths()[2])
> .libPaths()
[1] "[インストール先]/R-Portable/App/R-Portable/library"
この状態で、必要なlibraryをインストールします。
install.packages("shiny")
これで、[インストール先]/R-Portable/App/R-Portable/library
に必要なライブラリがインストールされます。
起動スクリプト
以下のようなディレクトリ構成にします。
App/
├ ShinyApps/
│ ├ app.R #shinyアプリソースコード
│ ├ run.vbs #アプリ全体の起動
│ └ runShinyApp.R #shiny起動スクリプト
│
└ R-Portable/
shinyを起動するスクリプトを記述します。
.libPaths("../R-Portable/App/R-Portable/library")
shiny::runApp("./",port=8888,launch.browser=TRUE)
全体を起動するスクリプトはこんな感じ
CreateObject("Wscript.Shell").Run "..\R-Portable\App\R-Portable\bin\R.exe CMD BATCH --vanilla --slave runShinyApp.R" & " " & RND & " ", 0, False
これで、App/ディレクトリを丸々配布し、run.vbsを実行するとブラウザ上にshiny製のページが表示されます。
元の記事や大元の記事では、ポータブル版のブラウザを使うことで万全な体制(?)にしていますが、今回は簡略版です。古めのブラウザを使っている人に配布する場合はポータブル版ブラウザも設定しておくと安心です。(容量は大変なことになりますが)