如何在reactive()更改中创建一个值,具体取决于reactive()内部的observeEvent()

时间:2017-07-27 18:10:22

标签: r shiny

以下是摘录,问题是:如何在observeEvent()reactive()更改a值?

编辑:真正的问题是,“没有reactiveValues()吗?

ui <- fluidPage(
  actionButton("btn_change", "Change Values"),
  actionButton("btn_print","Print values")
)

server <- function(input, output) {
    a <- 1
    data <- reactive({
      observeEvent(input$btn_change, {
        a <- a + 1
      })
      a
    })

  observeEvent(input$btn_print, {
    print(paste("data = ", data()))
  })
}

shinyApp(ui, server)

1 个答案:

答案 0 :(得分:2)

  

编辑:您修改了问题,询问是否可以没有reactiveValues。在这种特定情况下,是的,因为每次单击时,动作按钮的值都会增加1。本帖子底部显示了更广泛适用的reactiveValues之前的答案。

library(shiny)
ui <- shinyUI(
  fluidPage(
    actionButton("btn_change", "Change Values"),
    actionButton("btn_print","Print values")
  )
)

server <- function(input, output) {
  a <- 1

  data <- reactive({
    a + input$btn_change 
  })

  observeEvent(input$btn_print, {
    print(paste("data = ", data()))
  })

}

shinyApp(ui, server)
  

EDIT。根据您的评论修改了解决方案

我认为你要做的是每次点击按钮时增加被动的值。您可以通过使用reactiveVal来实现。您可以通过x()获取其价值,并将其值设置为x(1),其中x是被动值的名称。

请注意,您可以在反应中使用此reactiveval()。无论何时单击按钮,反应值都会增加,这将触发您的反应计算。

library(shiny)
ui <- shinyUI(
  fluidPage(
    actionButton("btn_change", "Change Values"),
    actionButton("btn_print","Print values")
  )
)

server <- function(input, output) {
  a <- 1

  data <- reactiveVal()
  data(a)

  observeEvent(input$btn_change, {
    old_value = data()
    data(old_value+1)
  })

  your_reactive <- reactive({
    data()*2+1
  })


  observeEvent(input$btn_print, {
    print(paste("data = ", your_reactive()))
  })

}

shinyApp(ui, server)