R闪亮:observeEvent和eventReactive的不同行为

Posted

技术标签:

【中文标题】R闪亮:observeEvent和eventReactive的不同行为【英文标题】:R shiny: different behaviours of observeEvent and eventReactive 【发布时间】:2020-12-04 05:40:47 【问题描述】:

下面闪亮的应用程序显示了一个使用rhandsontable() 构建的可编辑表格。

问题:您能解释一下为什么每当对数据表进行编辑时,控制台就会打印"ping",而从不打印"pong"

library(shiny)

ui <- fluidPage(
  rhandsontable::rHandsontableOutput(
    outputId = "data")
)

server <- function(input, output, session) 
  
  data <- data.frame(a = 1, b = 2, c = 3)
  
  output$data <- rhandsontable::renderRHandsontable(
    rhandsontable::rhandsontable(
      selectCallback = TRUE,
      data = data)
  )
  
  observeEvent(input$data$changes$changes, 
    print("ping")
  )
  
  edits <- eventReactive(input$data$changes$changes, 
    print("pong")
  )
  


shinyApp(ui = ui, server = server)

【问题讨论】:

【参考方案1】:

这是因为 edits() 此后没有被调用,所以 shiny 认为你不需要它,因此没有理由对其进行任何工作,你需要添加它应该去的地方或你想要做的事情用它:

library(shiny)

ui <- fluidPage(
    rhandsontable::rHandsontableOutput(
        outputId = "data")
)

server <- function(input, output, session) 
    
    data <- data.frame(a = 1, b = 2, c = 3)
    
    output$data <- rhandsontable::renderRHandsontable(
        rhandsontable::rhandsontable(
            selectCallback = TRUE,
            data = data)
    )
    
    observeEvent(input$data$changes$changes, 
        print("ping")
    )
    
    edits <- eventReactive(input$data$changes$changes, 
        print("pong")
    )
    
    observe(
        edits()
    )
    


shinyApp(ui = ui, server = server)

【讨论】:

以上是关于R闪亮:observeEvent和eventReactive的不同行为的主要内容,如果未能解决你的问题,请参考以下文章

来自 selectInput 的具有多个条件的闪亮 R 观察事件

闪亮的observeEvent复制输出

无法使用 observeEvent 和 eventReactive 更新闪亮应用程序中的输入

闪亮,observeEvent,updateSelectInput,输入重置

应用启动时闪亮的 observeEvent 触发器

闪亮的 observeEvent 表达式运行不止一次