r - Shiny 的 react 性解释(使用 ObserveEvent)

标签 r shiny

我希望使用下面的简化代码作为示例,对 Shiny 的 react 行为有一些了解。

当 y 在应用程序中更新时,图表也会更新。
当 x 在应用程序中更新时,图表不会更新。

我已经阅读了 Shiny 的教程,我的理解是,鉴于我已经将 test() 和 plot() 函数都包装在了observeEvent 中,两个参数都不应该在更改时导致图表更新。

有人可以帮助解释这背后的逻辑吗?

library(shiny)

test <- function(x){x*2}

shinyServer(function(input, output, session) {

  observeEvent(input$run, {
    x = test(input$x)
    output$distPlot <- renderPlot({
      if(input$y){
        x = x+2
      }
      plot(x)
    })
  })

})

shinyUI(fluidPage(

  sidebarLayout(
      sidebarPanel(
      numericInput("x", "x:", 10),
      checkboxInput("y", label = "y", value = FALSE),
      actionButton("run", "run")
    ),

    mainPanel(
      plotOutput("distPlot")
    )
  )
))

最佳答案

如果你把这条线x = test(input$x)内部renderPlot当 x 或 y 发生变化时,它会使用react。本质上,当第一次单击操作按钮时,观察者会创建一个响应式(Reactive)输出,然后您只需一个响应式(Reactive)元素来响应其内部输入的更改。希望有帮助。

为了使图表仅在单击按钮时更新,您可能需要将正在绘制的数据放入 eventReactive 并将其用作图表的输入。

像这样的东西:

data <- eventReactive(input$run, {
    x = test(input$x)
    if(input$y){
      x = x+2
    }
    x
  })
output$distPlot <- renderPlot({
  plot(data())
})

关于r - Shiny 的 react 性解释(使用 ObserveEvent),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37574682/

相关文章:

regex - 从字符串中解析出 ISIN

R data.table %like% 与逻辑 AND

R 重命名一个对象/data.frame 没有中间对象

R:单文件 Shiny 应用程序的显示模式

javascript - 如何在 Shiny 的某些单元格中创建带有空格的类似矩阵的复选框组?

r - 如何比较7个数字列,获取它们之间的最小数字并从R中的字符变量插入值?

r - 在 rmarkdown 中打印存储在列表中的任意数量的数据帧作为分页表

r - 如何在选项卡上获得 Shiny 的通知图标

r - 为慢速下载处理程序()加载消息

r - R Shiny 仪表板标题中的主页按钮