Shinyを使って、RだけでWebアプリケーション
Shinyを使うと、Rだけで分析Webアプリケーションが作れる.
サーバ側の処理も、ブラウザのuiも、Javascript/HTML/CSSを書かずとも、Rで書ける.
Shinyのインストールは、Rのコンソールで、
options(repos=c(RStudio='http://rstudio.org/_packages', getOption('repos')))
install.packages('shiny')
をするだけ。
Shinyアプリの最小構成は、以下のようになる.
~/shinyapp
|-- ui.R (ブラウザ側の処理)
|-- server.R (サーバ側の処理)
.Rの2つを実装する必要がある.
例えばこんな感じになる.(tutorialの例より)
ui.R
library(shiny)
# ランダムな分布のplotをするアプリのUI定義
shinyUI(pageWithSidebar(
# アプリタイトル
headerPanel("Hello Shiny!"),
# サンプルの数を設定するスライドバー
sidebarPanel(
sliderInput("obs",
"Number of observations:",
min = 0,
max = 1000,
value = 500)
),
# サーバで生成されたplotを表示
mainPanel(
plotOutput("distPlot")
)
))
server.R
library(shiny)
# ランダムな分布を生成・プロットするサーバロジックの定義
shinyServer(function(input, output) {
# reactivePlotは、inputが変わったら自動で再実行される、
# 出力typeはplot(画像)なFunction
output$distPlot <- reactivePlot(function() {
# 乱数を生成する
# rnorm(n)は、正規分布に従う乱数をn個生成するfunction
dist <- rnorm(input$obs)
# ヒストグラムをplotする
hist(dist)
})
})
この2つのファイルを作ったら、Rのコンソールで実行
> runApp("~/shinyapp")
Listening on port 8100
HttpのWebServerが立ち上がる.
ブラウザのhttp://localhost:8100/を確認すると(自動で開く)、
という風に、Webアプリケーションが実行されているのが分かる.
スライドバーをドラッグすると、自動でグラフが再描画される.
consoleに入らずに実行するには
R -e "shiny::runApp('~/shinyapp')"
Shiny自体はRStudioに依存はしておらず、任意のRの環境(R console,Rgui for windows等)で実行出来る. なのでもちろん、任意のRのライブラリが使える.
RStudio IDEのサーバ版を使って開発、そのままWebアプリ化~なんてのがやりやすいから、サーバ版のRStudioとの相性は良さそう.
タイトルでは「Rだけで」と書いたけど、ui.Rを使わずにhtmlで書くことも出来る.
「Rは書けるけど、Webアプリ開発には詳しくない」という人たち(統計屋さんとか)でも気軽にこういうのが作れるようになったのは良いですね.