翻译的一塌糊涂,专业词汇实在是看不懂,目前也就只能凑活把功能实现咯
REF
https://shiny.rstudio.com/reference/shiny/latest/withProgress.html
参数设置
函数选项
withProgress(expr, min = 0, max = 1, value = min + (max - min) * 0.1,
message = NULL, detail = NULL, style = getShinyOption("progress.style",
default = "notification"), session = getDefaultReactiveDomain(),
env = parent.frame(), quoted = FALSE)
setProgress(value = NULL, message = NULL, detail = NULL, session = getDefaultReactiveDomain())
incProgress(amount = 0.1, message = NULL, detail = NULL, session = getDefaultReactiveDomain())
参数设置
参数 | 说明 |
---|---|
expr | 需要执行的代码,包含对setprogress的调用 |
min | 进度条的初始值,必须小于max,默认为0 |
max | 进度条的最大值,大于min,默认为1 |
value | 单一数值向量,具体含义没看懂 |
message | 字符串,展示给用户的信息,如果是NULL,隐藏当前信息 |
detail | 字符串,展示在message旁 |
style | 进度条样式,默认notification右下角展示,style = ‘old’ 网页前端展示 |
session | shiny会话变量,用以提供shinyserver的功能,默认自动寻找会话 |
env | 【没看懂。。。expr所应用的环境???】 |
quoted | expr是否引用表达式 |
amount | incProgress 参数,进度条的增加量,默认0.1 |
描述
在长时间运行操作时,向用户报告进度信息。
细节
shiny中显示进度信息的有两个不同的API。函数withProgress
和incProgress
或setProgress
提供简单的接口功能,而Progress
提供一个面向对象的API。
withProgress
将会产生一个新的进度条,当incProgress
或setProgress
被第一次调用时。withProgress
执行完成时,进度条面板将会移除。
incProgress
函数按照指定的数值增加进度,而setProgress
可以设置指定值,并且设置需要展示的脚本
通常withProgress
、incProgress
、setProgress
这三个函数就已经够用了。但是如果是异步或者不能够单一分装,则需要用Progress
.
shiny0.14新版本中,进度条使用新的API,如果想使用老版本,每一次调用withProgress
设置style=‘old’,如果不想每一次都要重新设置,则需要在server function中设置shinyOptions(progress.style="old")
。
例子
## Only run examples in interactive R sessions
library(shiny)
ui <- fluidPage(
plotOutput("plot")
)
server <- function(input, output) {
output$plot <- renderPlot({
withProgress(message = 'Calculation in progress',
detail = 'This may take a while...', value = 0,
expr = {
for (i in 1:15) {
incProgress(1/15)
Sys.sleep(0.25)
}
})
plot(cars)
})
}
shinyApp(ui, server)
下面貌似比较实用,可以分开设置进度条
## Only run examples in interactive R sessions
if (interactive()) {
ui <- fluidPage(
plotOutput("plot")
)
server <- function(input, output, session) {
output$plot <- renderPlot({
progress <- Progress$new(session, min=1, max=15)
on.exit(progress$close())
progress$set(message = 'Calculation in progress',
detail = 'This may take a while...')
for (i in 1:15) {
progress$set(value = i)
Sys.sleep(0.5)
}
plot(cars)
})
}
shinyApp(ui, server)
}