无法重置反应式 rhandsontable observeEvent

Unable to reset reactive rhandsontable observeEvent

我使用 R 有一段时间了,但 R shiny 对我来说完全是一门外语。

我有一个使用 rhandsontable 的 RShiny 应用程序,它从 rhandsontable 中的另一列和 rhandsontable 之外的另一列获取输入以计算新列。目前,table 会在 table 中的任何条目被修改时更新所有内容,但我想尽可能地减少用户错误的风险,或者通过使 rhandsontable 对 table 内部和外部的变化做出反应(首选)或在单击按钮时重置。

下面的示例修改自 ,但重现了我的问题。一旦我为 rhandsontable 添加了一个 observeEvent,甚至在我调用外部输入之前,重置按钮就不再起作用了。

为了使 observeEvent 对外部输入的变化和 table 变化做出反应,我尝试进行反应性输入(例如,listener <- reactive(c(input$two_by_two$changes$changes, input$reset_input))),将它们都放在 observeEvent (例如,input$two_by_two$changes$changes | input$reset_input),两者都会导致 Warning: Error in do.call: second argument must be a list 错误。

library(shiny)
library(rhandsontable)

server <- shinyServer(function(input, output, session) {
  FACTOR <- reactive(input$factor_val)
  DF <- data.frame(A = c(1, 2), B = c(2, 4), row.names = c("C", "D"))
  DF1 <- reactiveValues(data=DF)
  output$two_by_two <- renderRHandsontable({
    input$reset_input 
    rhandsontable(DF1$data)
  })
  observeEvent(input$two_by_two$changes$changes,
               {DF1$data <- hot_to_r(input$two_by_two)
               DF1$data[,2] = DF1$data[,1]*FACTOR() }) })


ui <- shinyUI(fluidPage(
  actionButton(inputId = "reset_input", label = "Reset"),
  br(),
  numericInput("factor_val","Multiplier Value",min=0,max=10,value=2),
  rHandsontableOutput("two_by_two")
))

shinyApp(ui, server)

再次感谢您的帮助。

您无法重置的原因是您更改了反应性数据框,但从未将其重置回来。我添加了一个新的观察事件来处理它。请看看这是否是您要找的。

library(shiny)
library(rhandsontable)

server <- shinyServer(function(input, output, session) {
  FACTOR <- reactive(input$factor_val)
  DF <- data.frame(A = c(1, 2), B = c(2, 4), row.names = c("C", "D"))
  DF1 <- reactiveValues(data=DF)
  observeEvent(input$reset_input, {
    DF1$data <- DF
  })
  
  output$two_by_two <- renderRHandsontable({
    #input$reset_input
    rhandsontable(DF1$data)
  })
  observeEvent(input$factor_val, {
               req(input$factor_val)
               DF1$data <- hot_to_r(req({input$two_by_two}))
               DF1$data[,2] = DF1$data[,1]*FACTOR()
               })
})

ui <- shinyUI(fluidPage(
  actionButton(inputId = "reset_input", label = "Reset"),
  br(),
  numericInput("factor_val","Multiplier Value",min=0,max=10,value=2),
  rHandsontableOutput("two_by_two")
))

shinyApp(ui, server)