06_tabsetsは、サーバー側で分布を生成し、UI側で分布を3つの形式でタブ上に配置して表示する例です。
「06_tabsets」の実行
library(shiny) runExample("06_tabsets")
server.R
library(shiny) # ランダムな分布を生成するサーバー側を定義 function(input, output) { # 分布を生成する # 入力が変化したときにreactiveに呼ばれる # 下部の出力関数は、ここで生成したreactiveな分布を使用する data <- reactive({ dist <- switch(input$dist, norm = rnorm, unif = runif, lnorm = rlnorm, exp = rexp, rnorm) dist(input$n) }) # dataのプロットとラベルを生成 # 入力は両方と依存関係があり、どちらかが変化したときはそれに追随して変化する output$plot <- renderPlot({ dist <- input$dist n <- input$n hist(data(), main=paste('r', dist, '(', n, ')', sep='')) }) # データのsummaryを生成 output$summary <- renderPrint({ summary(data()) }) # HTMLで表記したデータの表を生成 output$table <- renderTable({ data.frame(x=data()) }) }
Code license:MIT
switch()
でdist
に、分布を生成するための関数名を与える。rnorm()
は正規分布を、runif()
は連続一様分布、rlnorm()
は対数正規分布、rexp()
は指数分布である例として、
input$dist
にnorm
、input$n
が50のとき、17行目のdist(input$n)
ではrnorm(50)
が実行され、以下の分布を返す
> rnorm(50) [1] -0.62914536 -0.73371948 0.30965080 -0.27329928 -1.18324678 1.06704008 -0.93215703 [8] -0.73117791 -1.65166615 -0.36209932 -0.76875906 0.54347454 1.17110890 0.03704137 [15] -1.86078985 1.37193112 0.76647807 1.91547888 -1.04685644 -1.19995233 -0.13173718 [22] 1.32920123 1.19872686 0.01525256 0.33566227 -1.95291135 0.58520576 0.04062392 [29] -0.73173476 2.41503834 0.17942321 0.30430169 -1.43702559 -0.26643687 -0.09946178 [36] -1.61477804 0.65289756 -0.18279837 1.32254177 0.31122224 0.24928538 -0.91399839 [43] 0.75083835 -0.76780444 0.13232907 1.28965217 0.26054202 0.64163957 2.09648604 [50] 1.10425454
hist()
で生成したデータのヒストグラムを生成summary()
でデータのsummaryを文字列として生成data.frame()
でデータの表を生成
ui.R
library(shiny) # ランダムな分布を表示するUIを定義 fluidPage( # タイトル titlePanel("Tabsets"), # サイドバーに、ランダムな分布の種類と、データ数を選択するコントロールを配置 # br()は、余分な垂直のスペースを作るために挿入 sidebarLayout( sidebarPanel( radioButtons("dist", "Distribution type:", c("Normal" = "norm", "Uniform" = "unif", "Log-normal" = "lnorm", "Exponential" = "exp")), br(), sliderInput("n", "Number of observations:", value = 500, min = 1, max = 1000) ), # 生成された分布のプロット、summary、HTMLの表を含むタブを表示 mainPanel( tabsetPanel(type = "tabs", tabPanel("Plot", plotOutput("plot")), tabPanel("Summary", verbatimTextOutput("summary")), tabPanel("Table", tableOutput("table")) ) ) ) )
Code license:MIT
サイドバーに、
radioButtons()
でラジオボタンを、sliderInput()
でスライダーを配置tabsetPanel
で3つのタブtabPanel()
を配置。それぞれ、plotOutput()
,verbatimTextOutput()
,tableOutput()
でプロット、テキスト、HTML表を出力