[shiny 2]

ui 用戶自定義界面設(shè)置
server 服務(wù)端腳本

Shiny Text這個(gè)應(yīng)用程序展示的是直接打印R對象,以及用HTML表格展示數(shù)據(jù)框。要運(yùn)行例子程序,只需鍵入:

runExample("02_text")

前面那個(gè)例子里用一個(gè)滑動條來輸入數(shù)值,并且輸出圖形。而這個(gè)例子更進(jìn)了一步:有兩個(gè)輸入,以及兩種類型的文本輸出。

如果你改變觀測個(gè)數(shù), 將會發(fā)現(xiàn)Shiny應(yīng)用程序的一大特性:輸入和輸出是結(jié)合在一起的,并且“實(shí)時(shí)”更新運(yùn)算結(jié)果(就像Excel一樣)。 在這個(gè)例子中,當(dāng)觀測個(gè)數(shù)發(fā)生變化時(shí),只有表格更新,而不需要重新加載整個(gè)頁面。

下面是用戶界面定義的代碼。請注意,"sidebarPanel" 和 "mainPanel" 的函數(shù)調(diào)用中有兩個(gè)參數(shù)(對應(yīng)于兩個(gè)"輸入" 和 兩個(gè) "輸出").
ui.R

library(shiny)

# Define UI for dataset viewer app ----
ui <- fluidPage(

  # App title app標(biāo)題 ----
  titlePanel("Shiny Text"),

  # Sidebar layout with a input and output definitions 帶有輸入和輸出定義的邊欄布局----
  sidebarLayout(

    # Sidebar panel for inputs  用于輸入的側(cè)欄面板----
    sidebarPanel(

      # Input: Selector for choosing dataset ----
      selectInput(inputId = "dataset",
                  label = "Choose a dataset:",
                  choices = c("rock", "pressure", "cars")),

      # Input: Numeric entry for number of obs to view ----
      numericInput(inputId = "obs",
                   label = "Number of observations to view:",
                   value = 10)
    ),

    # Main panel for displaying outputs ----
    mainPanel(

      # Output: Verbatim text for data summary ----
      verbatimTextOutput("summary"),

      # Output: HTML table with requested number of observations ----
      tableOutput("view")

    )
  )
)

服務(wù)端的程序要稍微復(fù)雜一點(diǎn)?,F(xiàn)在,我們創(chuàng)建:

一個(gè)反應(yīng)性表達(dá)式來返回用戶選擇的相應(yīng)數(shù)據(jù)集。
還有兩個(gè)渲染表達(dá)式(rendering expressions,分別是renderPrint 和renderTable),以返回 output$summaryoutput$view 的值。
這些表達(dá)式和第一個(gè)例子中的 renderPlot 運(yùn)作方式類似:通過聲明渲染表達(dá)式,你也就告訴了shiny,一旦渲染表達(dá)式所依賴的值(在這里例子中是兩個(gè)用戶輸入值的任意一個(gè):input$datasetinput$n)發(fā)生改變,表達(dá)式就會執(zhí)行。。

# Define server logic to summarize and view selected dataset ----
server <- function(input, output) {

  # Return the requested dataset ----
  datasetInput <- reactive({
    switch(input$dataset,
           "rock" = rock,
           "pressure" = pressure,
           "cars" = cars)
  })

  # Generate a summary of the dataset ----
  output$summary <- renderPrint({
    dataset <- datasetInput()
    summary(dataset)
  })

  # Show the first "n" observations ----
  output$view <- renderTable({
    head(datasetInput(), n = input$obs)
  })

}

Create Shiny app ----

shinyApp(ui = ui, server = server)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容