通常,我们用shiny做的可视化界面,数据在一开始读入后,即使数据源的数据有变动,也往往需要手动进行刷新操作。若希望数据能定时自动刷新,则可以通过在实时表达式中添加invalidateLater()来实现。
invalidateLater函数是使对象在指定时间后无效化并重新执行,如invalidateLater(20000)可实现每2秒钟自动刷新数据。
invalidateLater(millis, session = getDefaultReactiveDomain())
下面的例子是展示每秒自动更新的实时时间。可以运行试试
library(shiny) # ui ------------------------------------------ ui <- shinyUI(fluidPage( textOutput("currentTime") )) # server ---------------------------------------- server <- shinyServer(function(input, output) { t <- reactive({ invalidateLater(1000) #1000毫秒之后重新执行 paste("当前时间是:", Sys.time()) }) output$currentTime <- renderText({ t() }) }) # Run the application shinyApp(ui = ui, server = server)