Как вернуться обратно к первому сюжету в R-Shiny?

#r #shiny #shinydashboard #shiny-server

#r #блестящий #shinydashboard #shiny-сервер

Вопрос:

Я работаю над приложением R-Shiny. Я использовал следующий код (демонстрационный код) для взаимодействия с графиком.

   ui <- shinyUI(fluidPage(
   titlePanel("Title"),
   sidebarLayout(
     sidebarPanel(
     ),
     mainPanel(
       plotOutput("graph", width = "100%", click = "plot_click"),
       verbatimTextOutput("click_info")
     )
   )
 ) 
 )

 server <- shinyServer(function(input, output, session) { 
   observe({
     output$graph <- renderPlot({
       plot(1, 1)
     })  
   })


   # interaction click in graph  
   observe({
     if(is.null(input$plot_click$x)) return(NULL)
     x <- sample(20:30,1,F)
     isolate({
       output$graph <- renderPlot({
         draw.single.venn(x)
       }) 
     })

   })
 })
 shinyApp(ui=ui,server=server)
  

Он может изменить график одним щелчком мыши. Я хочу вернуться к самому первому сюжету, используя кнопку сброса. Пожалуйста, помогите.

Ответ №1:

Я добавил кнопку сброса на вашу боковую панель. Надеюсь, это полезно. Эта ссылка предоставляет больше информации о том, как выполнить этот тип функциональности.

 library(shiny)

ui <- shinyUI(fluidPage(
  titlePanel("Title"),
  sidebarLayout(
    sidebarPanel(
      actionButton("Reset", label="Reset Graph")
    ),
    mainPanel(
      plotOutput("graph", width = "100%", click = "plot_click"),
      verbatimTextOutput("click_info")
    )
  )
) 
)

server <- shinyServer(function(input, output, session) { 
  observeEvent(input$Reset,{ output$graph <- renderPlot({ plot(1, 1) }) }, ignoreNULL = F)

  # interaction click in graph  
  observe({
    if(is.null(input$plot_click$x)) return(NULL)
    x <- sample(20:30,1,F)
    isolate({
      output$graph <- renderPlot({
        draw.single.venn(x)
      }) 
    })

  })

})
shinyApp(ui=ui,server=server)
  

Комментарии:

1. Нет необходимости повторять код: observeEvent(input$Reset,{ output$graph <- renderPlot({ plot(1, 1) }) }, ignoreNULL = F)

2. У вас могут быть утечки памяти, при которых рендеринг и другие тяжелые операции внутри наблюдаются, попробуйте добавить больший набор данных, вы поймете, что я имею в виду

3. Спасибо за решение. Сообщит вам, если возникнет какая-либо проблема.

4. @olorcain Еще одна вещь. Какие изменения я предполагаю сделать, чтобы вернуться к предыдущему графику (не к первому).

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