我的 Shiny 应用程序必须执行一些稍慢的服务器端计算,因此我希望用户能够跟踪等待时发生的情况。这是我的应用程序结构的一个最小示例:
https://gist.github.com/0bb9efb98b0a5e431a8f
runGist("0bb9efb98b0a5e431a8f")
我希望发生的是:
- 点击“提交”
- 应用移至“输出”选项卡面板
- 它按照
observeEvent
中列出的顺序显示消息和输出
实际发生的情况是:
- 点击“提交”
- 一切都在服务器端立即执行
- UI 最后更新
在这里可以得到我想要的东西吗?
最佳答案
我无法使用您的方法提出解决方案。 Shiny
似乎会等到 server = function(input, output)
中的所有内容都被计算出来,并在之后显示结果,此时 output$.. .
可用。不知道有没有办法解决这个问题。
但是,已经实现了一个解决方案,您可以尝试:Progress indicators
使用您的代码实现:
library(shiny)
shinyApp(
ui = navbarPage(title="test", id="mainNavbarPage",
tabPanel("Input", value="tabinput",
numericInput('n', 'Number of obs', 100),
actionButton(inputId="submit_button", label="Submit")
),
tabPanel("Output", value="taboutput",
plotOutput('plot')
)
),
server = function(input, output, session) {
observeEvent(input$submit_button, {
# Move to results page
updateNavbarPage(session, "mainNavbarPage", selected="taboutput")
withProgress(message = "Computing results", detail = "fetching data", value = 0, {
Sys.sleep(3)
incProgress(0.25, detail = "computing results")
# Perform lots of calculations that may take some time
Sys.sleep(4)
incProgress(0.25, detail = "part two")
Sys.sleep(2)
incProgress(0.25, detail = "generating plot")
Sys.sleep(2)
})
output$plot <- renderPlot({hist(runif(input$n)) })
})
})
关于R Shiny -observeEvent-使命令按顺序实时执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32806113/