r-如果输入发生变化,如何停止基于先前输入值的计算



有没有办法在bring中指定只使用最新的输入值执行,并且停止所有可能仍在运行的基于先前输入值的计算?

请参阅以下示例应用程序进行演示。如果我快速地将输入从"0"改变为"0";a";至";b";至";c";至";d";至";e";,计算将花费20秒,但我希望在我选择";e";。

library(shiny)
# ui
ui <- fluidPage(
selectInput("letters", "", choices = letters[1:5]),
verbatimTextOutput("letters")
)
# server
server <- function(input, output) {
output$letters <- renderPrint({
Sys.sleep(5)
input$letters
})
}
# Run the application 
shinyApp(ui = ui, server = server)

我想您正在寻找debounce函数。它会在一定的时间窗口内减缓反应性表达的速度。

您应该在下面的示例中看到效果。

从反弹信息:

取消公告意味着r的每一个无效都将保留指定的时间窗口。如果r在该时间窗口内再次无效,则计时器再次启动这意味着只要在时间窗口内,无效信息不断从r到达反跳反应不会完全失效。仅在无效将停止(或充分减速(发送无效消息。

library(shiny)
# Define UI for application that draws a histogram
ui <- fluidPage(
selectInput("letters", "", choices = letters[1:5]),
verbatimTextOutput("letters")
)
# Define server logic required to draw a histogram
server <- function(input, output) {
letter <- reactive({
Sys.sleep(2)
input$letters
}) %>% debounce(500)
output$letters <- renderText({
print("Printing the letter")
letter()
})
}
# Run the application 
shinyApp(ui = ui, server = server)

最新更新