R Shiny:eventReactive有两个控件

时间:2016-08-26 15:50:13

标签: r shiny

我有以下R Shiny代码:

  economics_points <- eventReactive(input$sigmaThresholdSlider, {
    print("input$sigmaThresholdSlider fired.")
    get_points(input$daterange, 1, input$sigmaThresholdSlider)
  }, ignoreNULL = FALSE)
  economics_points <- eventReactive(input$daterange, {
    print("input$daterange fired.")
    get_points(input$daterange, 1, input$sigmaThresholdSlider)
  }, ignoreNULL = FALSE)

问题是economics_points仅在更改daterange控件时更新,而不是在sigmaThresholdSlider控件更改时更新。如果我颠倒了两个语句的顺序,economics_points仅在移动sigmaThresholdSlider时更新。换句话说,第二个语句会覆盖第一个语句。

如何更改此代码,以便在调整 控件时运行该代码?

documentation表示eventExpr的{​​{1}}参数可以是“甚至是大括号内的复杂表达式”,但没有给出有用的示例。

2 个答案:

答案 0 :(得分:3)

通过提供一个列表似乎可行:

服务器

library(shiny)

shinyServer(function(input, output) {

  view <- eventReactive(list(input$t1, input$t2),{
      t1 <- input$t1              
      t2 <- input$t2

      rnorm(1)
  })

  output$view <- renderPrint(view())

})

UI

library(shiny)

shinyUI(fluidPage( 

  sidebarLayout(
    sidebarPanel(
      actionButton("t1", "t1"),
      actionButton("t2", "t2")
    ),


    mainPanel(
      verbatimTextOutput("view")
    )
  )
))

答案 1 :(得分:2)

我认为您不需要eventReactive - 您可以使用reactive,它会响应任何值的变化。

economics_points <- reactive(get_points(input$daterange, 1, input$sigmaThresholdSlider))

编辑:不确定如何处理ignoreNULL = FALSE位,但似乎不是reactive的选项。