【问题标题】:Use ReactivePoll inside an observe (R Shiny)在观察内使用 ReactivePoll (R Shiny)
【发布时间】:2019-03-21 12:43:12
【问题描述】:

我试图在observe 中添加一个reactivePoll,因为我需要它在我的应用程序中的一些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 值改变时,检查函数中的 print 比以前计算 n + 1 次。

【问题讨论】:

    标签: r shiny reactive


    【解决方案1】:
    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())
      })
    }
    

    【讨论】:

    • 谢谢,看起来这些在 checkFunc 中使用 req 的解决方案不适用于我的实际情况,因为即使未满足 req ,它也会评估 checkFunc 中的更改。如果您添加第一选择空(“”),它会崩溃。
    猜你喜欢
    • 2019-05-21
    • 2019-04-26
    • 2018-11-28
    • 2016-07-03
    • 2017-04-05
    • 2021-11-28
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    相关资源
    最近更新 更多