[英]Columns within uiOutput in Shiny
在Shiny中,我使用renderUI
和tagList
在服務器元素中動態創建UI,然后使用uiOutput
顯示它。 它可以工作,但是我想將uiOutput
的內容uiOutput
幾列。 我怎么做?
這是Shiny畫廊中的(略略的)動態UI示例。 注意output$ui
如何包含一個tagList
,最終顯示為一列,但我希望它顯示為兩列。
請注意,我不能叫column
里renderUI
。
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.