【发布时间】:2019-07-15 12:15:09
【问题描述】:
我正在尝试使用 R Shiny 中的操作按钮来启动运行缓慢的 JAGS 模型。我希望在用户第一次点击按钮时出现一些文本,显示他们按下按钮的时间,以便他们知道正在发生一些事情。
到目前为止,操作按钮正在工作,但它会等到慢速运行的模型完成后才显示模型输出和文本。
我查看了以下问题,但它们似乎没有回答我的问题,至少不是以我理解的方式: R Shiny execute order Pattern for triggering a series of Shiny actions
我是 Shiny 的新手,所以我希望这是一个简单的问题。
Run.me <- function(a){
# some fake slow function
# This actually takes about 8 hours in real life
for (i in 2:a) {
Foo[i] <<- Foo[i-1] + sample(1:20,1)
}}
library(shiny)
定义服务器逻辑----
server <- function(input, output) {
observeEvent(input$runmodel, {
output$model.running <- renderText({paste("Model started at", Sys.time())})
})
observeEvent(input$runmodel, {
Foo <<- rep(1, 1e6)
Run.me(1e6)
output$model.ran <- renderTable({head(Foo)})
})
}
定义用户界面----
ui <- fluidPage(
fluidRow(
column(5, align = "center",
actionButton("runmodel", "Run the Model")),
textOutput("model.running")
),
fluidRow(
column(5, align = "center", tableOutput("model.ran"))
)
)
运行应用程序----
shinyApp(ui = ui, server = server)
【问题讨论】:
-
是您想要文本以便他们知道正在发生的事情的唯一原因吗?您可以考虑在加载时使用微调器。例如,我使用包
shinycssloaders。 -
您能否使用 shinycssloaders 发布答案并解释它们的工作原理?
-
@Megan 这是我的主要原因,但我也希望人们知道自从他们开始这个过程以来已经过去了多少时间。稍后我可能会添加一个“杀死”按钮,所以最好有一个允许一些灵活性的选项。
-
现在我已经添加了以下消息,当按下按钮时它会消失。不如添加文本那么好,但仍然表明正在发生某些事情。 output$model.running
-
这是有道理的。 @AdamWaring 我会添加它以防其他人使用它
标签: r shiny shiny-reactivity