Переключаться между графиками несколько раз - PullRequest
2 голосов
/ 12 марта 2020

Я создаю приложение Shiny, в котором пользователи могут переключаться между различными графиками, основываясь на щелчке по переключателю. Я последовал предложению cmaher в этом вопросе, но обнаружил, что могу переключиться только один раз. Второй раз выдает пустой вывод.

Почему при нажатии кнопки блеск не отображает вывод графика снова? И как это сделать?

MWE:

server <- shinyServer(function(input, output, session) {
PlotA <- reactive({
    plot(-2:2, -2:2)
  })

PlotB <- reactive({
  plot(-1:1, -1:1)
})

PlotInput <- reactive({
  switch(input$PlotChoice,
         "A" = PlotA(),
         "B" = PlotB())
})

output$SelectedPlot <- renderPlot({ 
  PlotInput()
})

})


ui <-  shinyUI(fluidPage(
  navbarPage(title=" ",
     tabPanel("A",
        sidebarLayout(
           sidebarPanel(
              radioButtons("PlotChoice", "Displayed plot:", 
                            choices = c("A", "B"))),
          mainPanel(plotOutput("SelectedPlot")))))
  ,  fluid=TRUE))

shinyApp(ui=ui, server=server)

Ответы [ 2 ]

1 голос
/ 12 марта 2020

Похоже, что switch не работает с реактивными выражениями, но я не знаю почему. Вот еще один вариант:

server <- shinyServer(function(input, output, session) {

  your_plot <- reactive({
    if(input$PlotChoice == "A") {
      plot(-2:2, -2:2)
    }
    else if (input$PlotChoice == "B"){
      plot(-1:1, -1:1)
    }
  })

  output$SelectedPlot <- renderPlot({ 
    your_plot()
  })

})


ui <-  shinyUI(fluidPage(
  navbarPage(title=" ",
             tabPanel("A",
                      sidebarLayout(
                        sidebarPanel(
                          radioButtons("PlotChoice", "Displayed plot:", 
                                       choices = c("A", "B"))),
                        mainPanel(plotOutput("SelectedPlot")))))
  ,  fluid=TRUE))

shinyApp(ui=ui, server=server)
1 голос
/ 12 марта 2020

Я могу воспроизвести вашу проблему. По крайней мере, в вашем примере нет необходимости использовать графики в качестве реактивов. Это должно сделать это:

PlotInput <- reactive({
  switch(input$PlotChoice,
         "A" = plot(-2:2, -2:2),
         "B" = plot(-1:1, -1:1))
})

Это приводит к ожидаемому поведению в моей среде. Однако мне не ясно, почему дополнительные реактивы () вызывают такие проблемы. Может быть, кто-то еще может объяснить это.

...