Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
闪亮:有可能让反应式代码与observeEvent()一起运行吗?_R_Shiny_Shiny Reactivity_Shinyapps - Fatal编程技术网

闪亮:有可能让反应式代码与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)