10
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 2018

Day 25

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

Last updated at Posted at 2018-12-24

http://stkdev.hatenablog.com/entry/2017/02/12/204631
昔書いた記事のリライト版になります。
※Windowsでの動作を前提にしています。

Rのコードを配布したい

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

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

Shinyアプリを配布してみる

アプリの準備

Shinyアプリを作成して、それをR環境のない人に配布する、ということを考えます。
まずはお手元の環境でShinyプロジェクトを作っておきましょう。
image.png
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製のページが表示されます。
image.png

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

10
9
1

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
10
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?