Как использовать блестящий: renderUI и блестящий: uioutput для создания различных типов вывода в зависимости от условия - PullRequest
0 голосов
/ 14 июня 2019

Я хотел бы иметь возможность производить другой тип вывода из uiOutput на основе ранее выбранного, как показано ниже:

ui <- fluidPage(
  titlePanel("Dynamically generated user interface components"),
  fluidRow(
    selectInput("output_type",
      label = "Select type of output", 
      selected = "table",
      choices = c("table", "barplot", "graph") 
    ),
    uiOutput("diff_outputs")
    # textOutput("choice")
  )
)


server <- function(input, output){

  # output$choice <- renderText({
  #   switch(
  #     input$output_type,
  #     "table" = "you chose table",
  #     "barplot" = "you chose barplot",
  #     "graph" = "you chose graph"
  #   )
  #   
  # })
  get_choice <- reactive({input$choice})
  output$diff_outputs <- renderUI({
    if (is.null(input$output_type))
      return()

    switch(
      # input$output_type,
      get_choice(),
      "table" = renderTable({head(women)}),
      "barplot" = renderPlot({barplot(women$height)}),
      "graph"  = renderPlot({plot(women$height ~ women$weight)})
    )
  })
  # 
  output$output_type <- renderText({input$input_type})

}

shinyApp(ui = ui, server = server)

Более простой вывод 'choice' работал должным образом, но ошибка, возвращаемая выше: Warning: Error in switch: EXPR must be a length 1 vector [No stack trace available]

Решения для этого очень приветствуются.

В конце концов, я бы тоже хотел, чтобы это было модульным, поэтому любые дополнительные проблемы и решения, связанные с этим, тоже были бы хороши.

1 Ответ

1 голос
/ 14 июня 2019
ui <- fluidPage(
  titlePanel("Dynamically generated user interface components"),
  fluidRow(
    selectInput("output_type",
                label = "Select type of output", 
                selected = "table",
                choices = c("table", "barplot", "graph") 
    ),
    uiOutput("diff_outputs")
  )
)

server <- function(input, output){

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

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

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

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

}

shinyApp(ui = ui, server = server)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...