Edited at
RDay 25

Rのコード(Shiny)を配布したい

http://stkdev.hatenablog.com/entry/2017/02/12/204631

昔書いた記事のリライト版になります。

※Windowsでの動作を前提にしています。


Rのコードを配布したい

Rで書いたコードを配布する手段もだいぶ充実してきました。

など、様々なよい配布・共有手段があるなかで今回は、ポータブル版のRに全部突っ込んでR環境を丸々配布するという力技の紹介です。


Shinyアプリを配布してみる


アプリの準備

Shinyアプリを作成して、それをR環境のない人に配布する、ということを考えます。

まずはお手元の環境でShinyプロジェクトを作っておきましょう。



New Projectから選ぶだけ。そのまま動かすとサンプルが起動しますね。


コード追加

ページを閉じたときにRを終了させる記述を追加しておきます。

app.Rもしくはserver.Rのserver関数の部分を以下を追記します。


  • 引数にsessionを追加

  • session$onSessionEndedを追加


app.R

# 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を起動するスクリプトを記述します。


runShinyApp.R

.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製のページが表示されます。

元の記事大元の記事では、ポータブル版のブラウザを使うことで万全な体制(?)にしていますが、今回は簡略版です。古めのブラウザを使っている人に配布する場合はポータブル版ブラウザも設定しておくと安心です。(容量は大変なことになりますが)