Shinyアプリケーションを一つのファイルから実行する方法を説明します。
Shinyのバージョン0.10.2から、server.Rとui.Rの2つのファイルからビルドすることなく、app.RファイルひとつだけでShinyアプリケーションが実行可能になっています。
新たにディレクトリを作成し、そのディレクトリ下にapp.Rファイルを作成します。runApp("ディレクトリ名")
を実行すると、app.Rに記述されたShinyアプリケーションが実行されます。サンプルアプリケーション01_helloを編集して、server.Rとui.Rからapp.Rを作成して、実行する例を示します。
01_helloは入力用のスライドバーと出力用のヒストグラムが配置されたShinyのサンプルアプリケーションです。
server.R
library(shiny) function(input, output) { output$distPlot <- renderPlot({ x <- faithful[, 2] bins <- seq(min(x), max(x), length.out = input$bins + 1) hist(x, breaks = bins, col = 'darkgray', border = 'white') }) }
Code license:MIT
ui.R
library(shiny) fluidPage( titlePanel("Hello Shiny!"), sidebarLayout( sidebarPanel( sliderInput("bins", "Number of bins:", min = 1, max = 50, value = 30) ), mainPanel( plotOutput("distPlot") ) ) )
Code license:MIT
server.Rとui.Rから作成したapp.R
app.Rでは以下の例に示すように、UIオブジェクトとserver関数を引数としてshinyApp()
を呼び出します。
library(shiny) # server関数functionの返す値を変数へ server <- function(input, output) { output$distPlot <- renderPlot({ x <- faithful[, 2] bins <- seq(min(x), max(x), length.out = input$bins + 1) hist(x, breaks = bins, col = 'darkgray', border = 'white') }) } # uiオブジェクトfluidPage()を変数へ ui <- fluidPage( titlePanel("Hello Shiny!"), sidebarLayout( sidebarPanel( sliderInput("bins", "Number of bins:", min = 1, max = 50, value = 30) ), mainPanel( plotOutput("distPlot") ) ) ) # uiオブジェクトとserver関数を引数として、shiniApp()実行 shinyApp(ui = ui, server = server)
Code license:MIT
runApp()とapp.Rなしで、Shinyアプリケーションを実行
shinyApp()
関数は、shiny.appobjクラスのオブジェクトを返します。このオブジェクトがコンソールに返されたときに、print.shiny.appobj()関数によりアプリケーションが出力されます。print.shiny.appobj()が、オブジェクトからShinyアプリケーションを実行する関数です。
同様の方法で、app.Rという名前のファイルでなく、そのファイルをディレクトリ下に置いていなくても、アプリケーションを実行できます。例えば、test.Rというファイルを作成して、そのファイル内でshinyApp()
関数呼び出しを最後に記述し、以下のコードをコンソール上から実行すれば、Shinyアプリケーションが実行されます。
print(source("test.R"))
source()
関数が実行されると、shiny.appobj-butが返されます。source()
だけでは、まだ出力はされません。print()
関数でラップすることにより、Shinyアプリケーションが実行されます。
この方法はお手軽ですが、ディレクトリ下にapp.Rをおいて実行する方法に比べると、いくつかのアドバンテージがなくなります。runApp()
関数を実行するとき、Shinyはファイルをモニターしており、ブラウザをリロードするとファイルをリロードします。開発時に、shinyアプリケーションを実行したまま、ファイルを編集するときには、こちらの方が便利です。