Как остановить сброс переменной в R-Shiny?

#r #shiny #shinydashboard

#r #блестящий #shinydashboard

Вопрос:

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

Например:

 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) { 
level <- "Value1"  
observeEvent(input$Reset,{   
output$graph <- renderPlot({ plot(1, 1) }) }, ignoreNULL = F)
  print(level)
  # interaction click in graph  
  observe({
    if(is.null(input$plot_click$x)) return(NULL)
    x <- sample(20:30,1,F)
    level <- "Value2"
    isolate({
      output$graph <- renderPlot({
        draw.single.venn(x)
      }) 
    })

  })

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

Я изменил переменную уровня на «Value2». Но на следующей итерации он снова превращается в «Value1» из-за первой строки кода. Можете ли вы помочь мне сохранить его как «Value2»?

Ответ №1:

Вы можете определить его как реактивное значение:

 server <- shinyServer(function(input, output, session) { 
  level_init <- reactiveValues(level="Value1") 
  level_react <- reactive({
    level_init$level <- "Value2"
  })
  print(isolate(level_init$level))
  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)
    level_react()
    print(level_init$level)
    isolate({
      output$graph <- renderPlot({
        draw.single.venn(x)
      }) 
    })

  })

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