ixixixixixixi

ixixiのblogです. twitterは@ixixi

Shinyを使って、RだけでWebアプリケーション

Shinyを使うと、Rだけで分析Webアプリケーションが作れる.

http://www.rstudio.com/shiny/

サーバ側の処理も、ブラウザの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/を確認すると(自動で開く)、

f:id:ixixixi:20121110143834p:plain

という風に、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アプリ開発には詳しくない」という人たち(統計屋さんとか)でも気軽にこういうのが作れるようになったのは良いですね.