如何使用Shiny:renderUI和Shiny:UiOutput生成带有Shiny模块的条件输出

时间:2019-06-14 12:14:39

标签: r shiny shinymodules

这是对an earlier question的扩展。

注意:现在,在代码中识别出错字并更正后,此解决方案现在可以工作。我希望这是其他人也可以使用的有用模式。

我希望通过uiOutput显示不同的输出类型,但是要在模块化框架中显示。

到目前为止,我有:

module_ui <- function(id){
  ns <- NS(id)

  tagList(
    selectInput(ns("output_type"),
                label = "Select type of output", 
                selected = "table",
                choices = c("table", "barplot", "graph") 
    ),
    uiOutput(ns("diff_outputs"))
  )
}


module_server <- function(input, output, session){
  ns <- session$ns

  output$table <- renderTable({head(women)}) 

  output$barplot <- renderPlot({barplot(women$height)})

  output$scatterplot <- renderPlot({plot(women$height ~ women$weight)})

  output_selected <- reactive({input$output_type})

  output$diff_outputs <- renderUI({
    if (is.null(output_selected()))
      return()
    switch(
      output_selected(),
      "table" = tableOutput(ns("table")),
      "barplot" = plotOutput(ns("barplot")),
      "graph" = plotOutput(ns("scatterplot"))
    )
  })

}

ui <- fluidPage(
  titlePanel("Dynamically generated user interface components"),
  fluidRow(
    module_ui("module")
  )
)

server <- function(input, output){
  callModule(module_server, "module")
}

shinyApp(ui = ui, server = server)

问题是uiOutput当前为空。

如果找到解决此类问题的方法,那将确实非常有帮助。

我认为只需要很小的修改,但是使用闪亮的模块仍然是我的新手。

1 个答案:

答案 0 :(得分:1)

可以,但是您有错字:taglist应该是tagList