R Shiny Двойное нажатие кнопки действия с реактивными значениями

У меня есть следующие блестящие приложения

server <- function(input, output, session) {
  rv <- reactiveValues(i = 0)

  output$myplot <- renderPlotly({
    dt = data.frame(x = 1:10, y = rep(rv$i,10))
    plot_ly(dt, x = ~x, y =~y) 
  })

  observeEvent(input$run,{
    rv$i <- 0
    observe({
      isolate({rv$i = rv$i + 1})
      if (rv$i < 10){invalidateLater(1000, session)}
    })
  })
}

ui <- fluidPage(
  actionButton("run", "START"),
  plotlyOutput("myplot")
)

shinyApp(ui = ui, server = server)

Кнопка действия работает нормально один раз: если я нажму на нее, сюжет обновится. Но проблема в том, что я не могу щелкнуть по нему дважды, так как это приводит к сбою приложения.

Я хотел бы, чтобы каждый раз, когда я нажимаю кнопку действия, значения rv$i возвращались к 0, и анимация перезапускалась снова и снова.


person K.Hua    schedule 25.02.2019    source источник


Ответы (1)


Не рекомендуется помещать наблюдателя внутрь другого наблюдателя. Просто поместите внутреннего наблюдателя наружу, и он заработает.

library(shiny)
library(plotly)

server <- function(input, output, session) {
  rv <- reactiveValues(i = 0)

  output$myplot <- renderPlotly({
    dt = data.frame(x = 1:10, y = rep(rv$i,10))
    plot_ly(dt, x = ~x, y =~y, mode = "markers", type = 'scatter') 
  })

  observeEvent(input$run,{
    rv$i <- 0
  })

  observe({
    isolate({rv$i = rv$i + 1})
    if (rv$i < 10){invalidateLater(1000, session)}
  })

}

ui <- fluidPage(
  actionButton("run", "START"),
  plotlyOutput("myplot")
)

shinyApp(ui = ui, server = server)
person Geovany    schedule 25.02.2019