Это небольшое расширение более раннего вопроса .
Примечание. Это решение теперь работает после того, как опечатка была обнаружена в коде и исправлена.Я надеюсь, что это полезный шаблон, который могут использовать и другие.
Я бы хотел, чтобы различные типы вывода отображались через 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
в настоящее время пусто.
Если бы решение этой проблемы было найдено, это было бы очень полезно.
Я думаю, что требуются только очень незначительные модификации, но я все еще плохо знаком с использованием блестящих модулей.