簡體   English   中英

uiOutput in Shiny中的列

[英]Columns within uiOutput in Shiny

在Shiny中,我使用renderUItagList在服務器元素中動態創建UI,然后使用uiOutput顯示它。 它可以工作,但是我想將uiOutput的內容uiOutput幾列。 我怎么做?

這是Shiny畫廊中的(略略的)動態UI示例。 注意output$ui如何包含一個tagList ,最終顯示為一列,但我希望它顯示為兩列。

請注意,我不能叫columnrenderUI

library(shiny)

server <- shinyServer(function(input, output) {
  output$ui <- renderUI({
    if (is.null(input$input_type)) {return()}
    tagList(list(div("Want this to be left column"),
         switch(input$input_type,
           "slider" = sliderInput("dynamic", "Want this to be right column",
                                  min = 1, max = 20, value = 10),
           "text" = textInput("dynamic", "Want this to be right column",
                              value = "starting value"),
           "numeric" =  numericInput("dynamic", "Want this to be right column",
                                     value = 12),
           "checkbox" = checkboxInput("dynamic", "Want this to be right column",
                                      value = TRUE))))
  })
  output$input_type_text <- renderText({input$input_type})
  output$dynamic_value <- renderPrint({str(input$dynamic)})
})

ui <- shinyUI(fluidPage(
  titlePanel("Dynamically generated user interface components"),
  wellPanel(selectInput("input_type", "Input type",
                        c("slider", "text", "numeric", "checkbox")
  )),
  wellPanel(uiOutput("ui")),
  wellPanel(
    tags$p("Input type:"),
    verbatimTextOutput("input_type_text"),
    tags$p("Dynamic input value:"),
    verbatimTextOutput("dynamic_value")
  )
))

shinyApp(ui = ui, server = server)

而不是將div和選定的小部件包裝到list ,然后包裝到tagList (您不需要它們都需要-它們之一就足夠了)

tagList(list(div("Want this to be left column"), switch(...) ...)

創建fluidRow並添加兩列-一列包含div ,另一列包含switch

fluidRow(column(6, div("Want this to be left column")),
         column(6, switch(input$input_type,
                        "slider" = sliderInput("dynamic", "Want this to be right column",
                                               min = 1, max = 20, value = 10),
                        "text" = textInput("dynamic", "Want this to be right column",
                                           value = "starting value"),
                        "numeric" =  numericInput("dynamic", "Want this to be right column",
                                                  value = 12),
                        "checkbox" = checkboxInput("dynamic", "Want this to be right column",
                                                   value = TRUE)
                  )
          )
        )

完整示例:

library(shiny)

server <- shinyServer(function(input, output) {
  output$ui <- renderUI({
    if (is.null(input$input_type)) {return()}
    fluidRow(column(6, div("Want this to be left column")),
             column(6, switch(input$input_type,
                              "slider" = sliderInput("dynamic", "Want this to be right column",
                                                     min = 1, max = 20, value = 10),
                              "text" = textInput("dynamic", "Want this to be right column",
                                                 value = "starting value"),
                              "numeric" =  numericInput("dynamic", "Want this to be right column",
                                                        value = 12),
                              "checkbox" = checkboxInput("dynamic", "Want this to be right column",
                                                         value = TRUE)
             )
             )
    )
  })
  output$input_type_text <- renderText({input$input_type})
  output$dynamic_value <- renderPrint({str(input$dynamic)})
})

ui <- shinyUI(fluidPage(
  titlePanel("Dynamically generated user interface components"),
  wellPanel(selectInput("input_type", "Input type",
                        c("slider", "text", "numeric", "checkbox")
  )),
  wellPanel(uiOutput("ui")),
  wellPanel(
    tags$p("Input type:"),
    verbatimTextOutput("input_type_text"),
    tags$p("Dynamic input value:"),
    verbatimTextOutput("dynamic_value")
  )
))

shinyApp(ui = ui, server = server)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM