首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法重置反应性rhandsontable observeEvent

无法重置反应性rhandsontable observeEvent
EN

Stack Overflow用户
提问于 2020-08-11 15:34:39
回答 1查看 354关注 0票数 0

我使用R已经有一段时间了,但是R闪亮对我来说似乎是一种完全的外语。

我有一个使用rhandsontable的RShiny应用程序,它从rhandsontable的另一列和rhandsontable的外部输入来计算一个新列。当前,当表中的任何条目都被修改时,该表确实会更新所有内容,但我希望尽可能减少用户错误的风险,方法是使rhandsontable响应表内外的更改(首选),或者在单击按钮时重置。

下面的示例是从How to reset to default a reactive rhandsontable?修改而来的,但转载了我的问题。一旦我为rhandsontable添加了一个observeEvent,甚至在我调用外部输入之前,重置按钮就不再工作了。

为了使observeEvent响应外部输入中的更改和表的更改,我尝试进行一个反应性输入(例如,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错误。

代码语言:javascript
复制
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)

再次感谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-11 18:15:26

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

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63361539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档