【发布时间】:2018-10-08 13:41:48
【问题描述】:
在下面的 Shiny 应用程序中,按下操作按钮(运行)时会执行长时间计算。计算结束时会显示输出。
应用程序中显示时钟。长时间计算正在进行时,时钟不会更新。
是否可以在计算过程中更新时钟?
代码:
library(shiny)
n <- c(1:42E7)
ui <- fluidPage(
actionButton(inputId = "run", label = "Run a long calculation"),
verbatimTextOutput("calc"),
verbatimTextOutput("time")
)
server <- function(input, output) {
x <- observeEvent(input$run,{
output$calc <- renderText({
head(sqrt(n))
})
})
output$time <- renderText({
invalidateLater(1000)
print(as.character(Sys.time()))
})
}
shinyApp(ui = ui, server = server)
感谢期待,
克里斯
【问题讨论】:
-
R 是单线程的,您所要求的不仅仅是“开箱即用”。尽管 Shiny 的作者正在研究“异步”和“承诺”来解决这些问题。我认为
future包已经有可能的解决方法 -
我想了很多......我可能可以修改我的包,将我需要的计算分成几个单独的函数调用。这不是我需要打印 IRL 的时钟,它是一个逐步更新的日志文件。
-
实际上,自从我上次检查以来,
promises已经达到了1.0(尽管仍然需要来自 Github 的 Shiny 开发版)。我试图整理出你的问题的答案,但还没有成功。参考:rstudio.github.io/promises
标签: r shiny shiny-reactivity shinyapps