分离反应性表达

时间:2017-06-05 07:11:03

标签: r reactive-programming shiny

我想为某些observeEvent调用特定的反应式表达式,并将其与其他observeEvent隔离。下面我有我想要实现的最小代码(我的实际应用程序包含许多调用反应式表达式的observeEvent)。

library(shiny)

ui <- fluidPage(

  numericInput("Num1", "First number:", 0),

  numericInput("Num2", "Second number:", 0),

  textOutput("Answer"),

  actionButton("Button_1", "Call reactive"),

  actionButton("Button_2", "Don't Call reactive")

)

server <- function(input, output){

  Ans <- reactive({
    a <-input$Num1 + input$Num2
    a
  })

  observeEvent(input$Button_1, {

    output$Answer <- renderText({Ans()})

  })

  observeEvent(input$Button_2, {

    output$Answer <- renderText({isolate(Ans())})

  })

}


shinyApp(ui = ui, server = server)

在上面的应用中,我有两个actionButtons Button_1(呼叫被动)和Button_2(请勿呼叫被动)。正如标签建议的第一个按钮(Button_1)我希望每次单击按钮时调用反应式表达式,但是对于第二个按钮(Button_2),我希望不要调用反应式表达式(即使输入改变)。为了防止调用反应式表达式的Button_2表单,我添加了isolate,但这并不会阻止调用反应式表达式。

即使输入发生变化,是否有任何方法可以隔离反应式表达式?

1 个答案:

答案 0 :(得分:3)

您可以使用?eventReactive()

所以用{/ p>替换reactive()函数

  Ans <- eventReactive(input$Button_1,{
    input$Num1 + input$Num2
  })

(然后您也可以删除isolate()功能。)

正如您所提到的,您有几个observeEvent()和更多可能的条件,值得一提的是,这也适用于多种条件:

  Ans <- eventReactive({input$Button_1;input$Button_2;...},{
    input$Num1 + input$Num2
  })