在观察值内使用ReactivePoll(R Shiny)

时间:2019-03-21 12:43:13

标签: r shiny reactive

我正在尝试在reactivePoll中包含observe,因为我需要在req完全填充我的应用程序后才能启动它(否则可能会崩溃),然后将其传递给我正在使用reactiveValues的会话变量。由于某种原因,每次我在变量中执行更改时,看起来reactivePoll都会创建其自身的副本,并开始执行checkFunc超过所需的次数。最小示例:

library(shiny)

ui <- fluidPage(selectInput("x", "Change options", c(1, 2)))

server <- function(input, output, session) {

  v <- reactiveValues()
  observe({
    print("obs")
    req(input$x)

    v$a <- reactivePoll(5000, session, 
                        checkFunc = function() {
                          print("test")
                          input$x
                        }, valueFunc = function() {
                          print("value")
                          1
                        })

    print(v$a())
  })
}

shinyApp(ui, server)

如您所见,当更改selectInput值时,检查功能内部的打印结果比以前计算n +1倍。

1 个答案:

答案 0 :(得分:0)

library(shiny)

ui <- fluidPage(selectInput("x", "Change options", c(1, 2)))

server <- function(input, output, session) {
  v <- reactiveValues()

  a <- reactivePoll(5000, session,
    checkFunc = function() {
      req(input$x)
      print("test")
      input$x
    },
    valueFunc = function() {
      print("value")
      1
    }
  )

  observe({
    print("obs")
    req(input$x)
    v$a <- a()
    print(v$a)
  })
}

shinyApp(ui, server)

server <- function(input, output, session) {
  v <- reactiveValues(
    a = reactivePoll(5000, session,
      checkFunc = function() {
        req(input$x)
        print("test")
        input$x
      },
      valueFunc = function() {
        print("value")
        1
      }
    )
  )  

  observe({
    print("obs")
    req(input$x)
    print(v$a())
  })
}