【发布时间】:2021-10-16 09:30:18
【问题描述】:
所以我想为在控制台中显示进度的长时间运行的函数long_run_op 创建一个 shinydashboardPlus GUI。这是该函数的一个最小示例:
long_run_op <- function() {
pb <- txtProgressBar(style=3, max=10)
for(i in 1:10) {Sys.sleep(0.1); setTxtProgressBar(pb, i)}
close(pb)
return(rnorm(10))
}
(如果你有兴趣:我想用很棒的keyATM::keyATM,不能和shiny::withProgress一起使用。)
现在我希望在闪亮的应用程序中显示控制台进度条。
到目前为止,我尝试的是使用verbatimTextOutput。这仅显示返回值。此外,服务器功能使用<<-,这不仅闻起来像坏习惯,甚至不起作用——情节从未显示。
(编辑:绘图未显示是因为 ui 中的函数错误,现在已修复,感谢@stefan。)
ui <- shinydashboardPlus::dashboardPage(
header=shinydashboardPlus::dashboardHeader(),
sidebar = shinydashboardPlus::dashboardSidebar(),
body=shinydashboard::dashboardBody(
shinydashboardPlus::box(
status="primary", width=12,
shiny::actionButton("run", "Run")
),
shinydashboardPlus::box(
status="primary", width=12,
shiny::verbatimTextOutput("progress")
),
shinydashboardPlus::box(
status="primary", width=12,
shiny::plotOutput("result")
)
)
)
server <- function(input, output, session) {
observeEvent(input$run, {
ans <- NA
output$progress <- shiny::renderText({
ans <<- long_run_op()
})
output$result <- shiny::renderPlot({
plot(ans)
})
})
}
app <- shiny::shinyApp(ui, server)
shiny::runApp(app, launch.browser=TRUE)
仍然在闪亮的学习曲线上,我被困在这里。有没有办法使这项工作?计算完成后,如果我能让进度条消失,加分。
EDIT2:sink 有帮助吗?有没有办法在 Shiny 中显示 textConnection 对象?
EDIT3:我开始认为,由于 Shiny 的单线程特性,我唯一的机会是将标准输出重定向到浏览器中的某些内容。使用两个进程对我来说似乎太复杂了。
EDIT4:找到this post。似乎很可能拦截并显示消息/警告/错误,但不是cat 输出。
【问题讨论】:
-
当您在 UI 中使用
renderPlot时,该图永远不会显示。试试shiny::plotOutput。 -
你可能想试试waitr package。
标签: r shiny progress-bar