Redraw the graph once if one reactive value changes, but not another?

I have two reactive values input$codeand input$variants, and I want to redraw the chart once if one of the following conditions is met.

  • code changes and changes
  • code changes and options do not change
  • code does not change and change options

I cannot call both input$code, and input$variantsin renderPlotly, otherwise the chart will be redrawn twice for # 1 above.


  output$choose_test <- renderUI({
    data_sets <- loadTest()
    selectizeInput(
      'test', 'Test', choices = data_sets$test, selected = data_sets$test[1]
    )
  })

  output$choose_code <- renderUI({
    validate(
      need(input$test, 'Please choose a test.')
    )

    code <- loadCode(input$test)
    selectizeInput(
      'code', 'Code', choices = code$code, selected = code$code[1]
    )
  })

  output$choose_variants <- renderUI({
    validate(
      need(input$test,  'Please choose a test.'),
      need(input$code,   'Please choose a code.')
    )

    dat <- loadVariants(input$test, input$code)

    default_select <- dat$variant[grep('v1|v2', dat$variant)]
    if (identical(default_select, factor(0))) {
      default_select <- dat$variant[1]
    }

    checkboxGroupInput("variants", "Variants",
                        choices  = dat$variant,
                        selected = default_select)
  })

  output$plot1 <- renderPlotly({

    runLocations <- isolate(loadRunsBetweenDates(input$test, input$code, input$variants))

    total_min_df <-
      runLocations %>%
      group_by(change_number, variant) %>%
      summarize(memory = min(memory))

    total_min_df$change_number <- as.numeric(as.character(total_min_df$change_number))

    p <- ggplot(total_min_df,
           aes(x=change_number,
               y=memory,
               group=variant,
               color=variant))+
    geom_point()+
    geom_smooth(se = FALSE)+
    scale_x_continuous(labels = function(n){format(n, scientific = FALSE)})+
    scale_y_continuous(labels = function(n){format(n, scientific = FALSE)})+
    labs(x = "Change Number", y = "Megabytes")

    ggplotly(p)
  })
+4
source share

Source: https://habr.com/ru/post/1688408/


All Articles