无法重设反应式可谐振的watchEvent

问题描述

我已经使用R已有一段时间了,但是R Shiny在我看来完全是一种外语。

我有一个使用Rhsonsontable的RShiny应用程序,该应用程序从Rhsonsontable中的另一列和Rhsonsontable外部获取输入以计算新列。目前,当修改表中的任何条目时,该表都会更新所有内容,但是我想通过使Rhandsontable对表内外的变化都做出反应来尽量降低用户出错的风险(首选)或单击按钮时重置。

下面的示例是从How to reset to default a reactive rhandsontable?修改而来的,但复制了我的问题。一旦我添加一个rhendsontable的observeEvent,即使在我调用外部输入之前,重置按钮也不再起作用。

为了使observeEvent对外部输入和表更改均具有反应性,我尝试做出响应式输入(例如,listener <- reactive(c(input$two_by_two$changes$changes,input$reset_input))),并将它们都放入observeEvent(例如,{{1})中}),都导致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)
  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)