Этот ответ пока не работает, я поставил его здесь, чтобы вы могли ответить за меня.
Вам необходимо выполнить обновление до версии Shiny (remotes::install_github("rstudio/shiny")
).
Я заменил ваш игрушечный пример на 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)
Я ожидал, что это сработает, но «дорогая операция» все еще блокирует, я еще не понял, почему. Надеюсь, это все еще будет полезно.
ref: https://rstudio.github.io/promises