闪亮:有可能让反应式代码与observeEvent()一起运行吗?
在下面的应用程序中,当按下操作按钮(运行)时,将执行一个长时间的计算。计算结束时将显示输出 应用程序中会显示一个时钟。当长时间计算正在进行时,时钟不会更新 在进行计算时,是否可以更新时钟 代码:闪亮:有可能让反应式代码与observeEvent()一起运行吗?,r,shiny,shiny-reactivity,shinyapps,R,Shiny,Shiny Reactivity,Shinyapps,在下面的应用程序中,当按下操作按钮(运行)时,将执行一个长时间的计算。计算结束时将显示输出 应用程序中会显示一个时钟。当长时间计算正在进行时,时钟不会更新 在进行计算时,是否可以更新时钟 代码: 库(闪亮) 这个答案还不起作用,我把它放在这里只是为了让你跟在我后面接 您需要更新到Shinny的开发版本(remotes::install\u github(“rstudio/shinny”)) 我将您的玩具示例替换为一个Sys.sleep(),因为传输提升选项future.globals.maxSi
库(闪亮)
这个答案还不起作用,我把它放在这里只是为了让你跟在我后面接
您需要更新到Shinny的开发版本(remotes::install\u github(“rstudio/shinny”)
)
我将您的玩具示例替换为一个Sys.sleep()
,因为传输提升选项future.globals.maxSize
所需的大向量仍然会导致我的机器崩溃
library(shiny)
library(promises)
library(future)
plan(multiprocess)
ui <- fluidPage(
actionButton(inputId = "run",
label = "Run a long calculation"),
verbatimTextOutput("calc"),
verbatimTextOutput("time")
)
server <- function(input, output, session) {
observeEvent(input$run,{
output$calc <- renderText({
future({
Sys.sleep(5)
42
}) %...>%
head() %...>%
print()
})
})
output$time <- renderPrint({
invalidateLater(1000)
as.character(Sys.time())
})
}
shinyApp(ui = ui, server = server)
库(闪亮)
图书馆(承诺)
图书馆(未来)
计划(多进程)
ui R是单线程的,您所要求的不仅仅是“开箱即用”。尽管Shiny的作者正在研究“异步”和“承诺”来解决这些问题。对于未来
软件包,已经有了一些可能的解决办法,我想我也这么认为。。。我可能可以修改我的包,将我需要的计算分为几个单独的函数调用。这不是我需要打印IRL的时钟,它是一个逐步更新的日志文件。实际上,promises
自从我上次检查以来已经达到了1.0
(不过仍然需要Github的Shining的开发版本)。我试图对你的问题做出一个答案,但还没有成功。裁判:太棒了,谢谢你。我一定要去看戏。不幸的是,我的客户不会热衷于使用CRAN之外的任何不是我自己构建的东西。我正在研究其他的解决办法。。。交叉我的手指,起重机很快就会更新!
library(shiny)
library(promises)
library(future)
plan(multiprocess)
ui <- fluidPage(
actionButton(inputId = "run",
label = "Run a long calculation"),
verbatimTextOutput("calc"),
verbatimTextOutput("time")
)
server <- function(input, output, session) {
observeEvent(input$run,{
output$calc <- renderText({
future({
Sys.sleep(5)
42
}) %...>%
head() %...>%
print()
})
})
output$time <- renderPrint({
invalidateLater(1000)
as.character(Sys.time())
})
}
shinyApp(ui = ui, server = server)