Обновление handsontable путем редактирования таблицы и / или eventReactive

Я используюrhandsontable пакет в приложении Shiny, который должен иметь следующую функциональность:

данные, используемые в расчете, могут быть сгенерированы случайным образом,actionButton (и когда приложение запускается)данные могут быть отредактированы пользователем вручную с помощью объекта handsontableпосле ручного редактирования должна быть возможность заново сгенерировать случайные данные, используя новый расчет

Следующее приложение делает именно то, что я хочу, но я не мог понять, как избавиться от глобальной переменнойdid_recalc, Это минимальный пример, когда данные состоят из двух числовых значений, которые суммируются.

library(shiny)
library(rhandsontable)

did_recalc <- FALSE

ui <- fluidPage(
  rHandsontableOutput('table'),
  textOutput('result'),
  actionButton("recalc", "generate new random vals and calculate")
)

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

  dataset_generator <- eventReactive(input$recalc, {
    df <- as.data.frame(runif(2))
    output$table <- renderRHandsontable({rhandsontable(df)})
    did_recalc <<- TRUE
    df
  }, ignoreNULL = FALSE)

  output$result <- renderText({ 
    df <- dataset_generator()
    if (!is.null(input$table) && !did_recalc) 
      df <- hot_to_r(input$table)
    did_recalc <<- FALSE
    sum(df)
  })
}) 

shinyApp(ui = ui, server = server)

Если я удалю!did_recalc состояние вoutput$result <- ... затем редактирование таблицы все еще вызывает (правильный) расчет. Но если нажать «recalc» (после некоторого ручного редактирования), то кнопка «recalc» просто генерирует новые случайные значения, но без пересчета суммы.

Мне кажется, чтоinput$table может быть изменено только путем ручного редактирования объекта таблицы и не заботится о новых значениях, передаваемых черезrenderRHandsontable, Следовательно, мне нужен этот хак с глобальной переменной, который позволяет мне отслеживать, если пользователь просто заново сгенерировал данные (вызывая этоinput$table является "устаревшим")

Кто-нибудь знает, как получить функциональность этого примера без глобальной переменной?

Ответы на вопрос(1)

Ваш ответ на вопрос