r - 如何在观察者之间传递 react 值?

标签 r shiny shiny-reactivity observers

在底部发布的代码中,我尝试将第二个 react 对象 (y) 的值限制为第一个 react 对象 (x) 的值>) 使用两个 observeEvents() 作为操作按钮点击计数器,如下图所示。插图显示了单击“Pos”按钮 3 次和“Neg”按钮 4 次的结果。这将如何完成?

我在下面的代码中注释掉了我的尝试之一。

插图:enter image description here

代码:

library(shiny)

ui <-  fluidPage(br(),
  actionButton("Btn1", "Pos"),
  actionButton("Btn2", "Neg"),
  br(),br(),
  textOutput("posClicks"),
  textOutput("negClicks"),
  textOutput("netClicks")
)

server <- function(input, output, session) {
  
  x = reactiveVal(0)
  y = reactiveVal(0)
  
  observeEvent(input$Btn1,{x(x()+1)})
  observeEvent(input$Btn2,{y(y()+1)})
  
  # below is commented-out because it gives strange results counting in leaps of 2's
  # observeEvent(input$Btn2,{
  #   if(x()-y(y()+1) >= 0){y(y()+1)}
  #   })
  
  output$posClicks <- renderText({paste('Pos clicks =',x())})
  output$negClicks <- renderText({paste('Neg clicks =',y())})
  output$netClicks <- renderText({paste('Net clicks =',x()-y())})
  
}

shinyApp(ui, server)

最佳答案

如果你确实需要有两个单独的观察,你可以这样做

  observeEvent(input$Btn1,{x(x()+1)})
  observeEvent(input$Btn2,{y(y()+1)})
  observe({
     if (y()>x()) {y(x())}
  })

您无需监听按钮的点击,只需观察y()的值,如果它大于x(),只需重置它。如果可以的话,更改 Btn2 逻辑会更容易

  observeEvent(input$Btn1,{x(x()+1)})
  observeEvent(input$Btn2,{y(min(y()+1, x()))})

关于r - 如何在观察者之间传递 react 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74880788/

相关文章:

RShiny 中的响应式(Reactive)输入 react 太快(不使用按钮)

R向量计数每个日期范围内的日期数

r - 如何将两个 data.frame 与不精确匹配的标识符进行匹配(一个标识符必须在另一个标识符的范围内)

r - 如何在单击按钮时截取 Shiny 应用程序的屏幕截图?

Rshinyhelper 因 htmlOutput 失败

shiny - 如何根据 radioGroupButton 选择在 Shiny 的 dashboardBody 中隐藏或显示图表

r - 如何在R Shiny App的复选框中保留值?

r - 只为百分比保留尾随零

r - 多个变量的自定义函数

r - 链接选项卡以在 R Shiny 中按行选择显示绘图