Обновление 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
является "устаревшим")
Кто-нибудь знает, как получить функциональность этого примера без глобальной переменной?