如何在给定时间而不是在计时器上更新反应函数?
how to update reactive functions at a given time and not on a timer?
我想让运行闪亮应用在指定的时间更新数据,每次系统中的分钟都是15的倍数(例如:12:00,12:15 , 12:30, 12:45, 13:00, 13:15 等)。我目前使用每 15 分钟触发一次的反应式计时器,但这并不能解决我的问题。如何只在系统时间变成15的倍数的那一刻更新应用程序?
获取当前时间,确定距下一次刷新还有多少时间,并适当地调用invalidateLater()
。
例如,以下闪亮的应用程序每 15 秒的倍数刷新一次时钟:
library(shiny)
ui <- fluidPage(
mainPanel(
textOutput('time')
)
)
server <- function(input, output) {
output$time <- renderText({
time <- as.integer(format(Sys.time(), "%S"))
invalidateLater((15 - time %% 15) * 1000)
format(Sys.time(), "%H:%M:%S")
})
}
shinyApp(ui = ui, server = server)
编辑:
自上次编辑以来,我稍微简化了计算。 time <- as.integer(format(Sys.time(), "%S"))
只是获取当前时间的 second-part。我们计算此秒数 MODULO 15 (time %% 15
) 以获得最后 15 秒倍数后的秒数。然后我们从 15 中减去该值以获得下一个倍数之前的秒数。由于时间必须以毫秒为单位,因此我们将结果乘以 1000。
我想让运行闪亮应用在指定的时间更新数据,每次系统中的分钟都是15的倍数(例如:12:00,12:15 , 12:30, 12:45, 13:00, 13:15 等)。我目前使用每 15 分钟触发一次的反应式计时器,但这并不能解决我的问题。如何只在系统时间变成15的倍数的那一刻更新应用程序?
获取当前时间,确定距下一次刷新还有多少时间,并适当地调用invalidateLater()
。
例如,以下闪亮的应用程序每 15 秒的倍数刷新一次时钟:
library(shiny)
ui <- fluidPage(
mainPanel(
textOutput('time')
)
)
server <- function(input, output) {
output$time <- renderText({
time <- as.integer(format(Sys.time(), "%S"))
invalidateLater((15 - time %% 15) * 1000)
format(Sys.time(), "%H:%M:%S")
})
}
shinyApp(ui = ui, server = server)
编辑:
自上次编辑以来,我稍微简化了计算。 time <- as.integer(format(Sys.time(), "%S"))
只是获取当前时间的 second-part。我们计算此秒数 MODULO 15 (time %% 15
) 以获得最后 15 秒倍数后的秒数。然后我们从 15 中减去该值以获得下一个倍数之前的秒数。由于时间必须以毫秒为单位,因此我们将结果乘以 1000。