Как заставить renderPlot происходить раньше, чем реагировать в зависимости от того же ввода - PullRequest
1 голос
/ 11 марта 2020

У меня есть один числовой вход. Значение numericInput выводится на график и переводится в реактивное значение. Как обновить график перед обновлением другого реактивного значения? График всегда становится серым, пока не будет обновлено реактивное значение.

Edit1: приведенный ниже код является минимальным поддельным примером моей проблемы. У меня иногда есть блестящее приложение, в котором изменение в одном входе одновременно запускает график и обновляет некоторое реактивное значение. В приведенном ниже примере, input$i наносится на график, и значение переводится в реактив value(). Sys.sleep(3) демонстрирует, что если реактивный расчет занимает много времени, приложение сначала делает это, а затем обновляет график. Иногда было бы неплохо сначала обновить сюжет, а затем сделать длинный расчет. У меня вопрос такой; могу ли я заставить renderPlot произойти сначала, а потом еще один реактив?

Пример ниже:

library(shiny)
library(ggplot2)

ui <- fluidPage(
  numericInput("i",
               "i",
               value = 0),
  plotOutput("plot")
)

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

  output$plot <- renderPlot({
    ggplot(data = NULL, aes(x = input$i, y = input$i)) + geom_point()
  })

  value <- reactive({
    Sys.sleep(3)
    input$i
  })

  observe(print(value()))

}

shinyApp(ui, server)
...