gpt4 book ai didi

R Shiny withProgress 放在哪里

转载 作者:行者123 更新时间:2023-12-04 14:30:33 26 4
gpt4 key购买 nike

在我的 Shiny 页面上,有一个读取大日志文件的步骤,加载需要 25 秒。我想在用户单击按钮后显示进度条。否则他们在等待时可能会认为它不起作用。

 #ui.R
#I have an actionButton to activate reading the log file
actionButton("getLog","Get Log data")

#server.R
observeEvent(input$getLog, {
nL = as.numeric(countLines("/script/cronlog.log"))
Log = read.table("/script/cronlog.log",sep = ";",skip = nL-1000)
LogFile = tail(Log,100)
colnames(LogFile) = "cronlog"
})

我正在尝试使用 withProgress,但我不知道如何使用它来包装代码。我试过这样的事情:

  observeEvent(input$getLog, {
withProgress(message = 'Calculation in progress',
detail = 'This may take a while...', value = 0, {
for (i in 1:60) {
incProgress(1/60)
Sys.sleep(0.25)
}
})
nL = as.numeric(countLines("/script/cronlog.log"))
Log = read.table("/script/cronlog.log",sep = ";",skip = nL-1000)
LogFile = tail(Log,100)
colnames(LogFile) = "cronlog"
})

进度条确实出现了,但加载进度似乎在进度条之后运行,这使得过程更长。我想我没有正确包装代码。

有什么建议吗?

提前致谢!

最佳答案

如果您应用的操作不是离散的,withProgress 对您帮助不大。您可以在各个语句之间增加进度条:

nL = as.numeric(countLines("/script/cronlog.log"))
incProgress(1/4)
log = read.table("/script/cronlog.log",sep = ";",skip = nL-1000)
incProgress(1/4)
...

但我怀疑它会产生巨大的变化。另一种方法是将输入文件分成多个 block ,并在每个文件后读取这些独立递增的计数器。

在实践中我会考虑删除以下部分:

nL = as.numeric(countLines("/script/cronlog.log"))

并使用标准系统实用程序仅通过管道传输所需数据:

read.table(pipe("tail -n 1000 /script/cronlog.log"), sep = ";")

或直接使用data.table::fread:

fread("tail -n 1000 /script/cronlog.log", sep = ";")

关于R Shiny withProgress 放在哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35346706/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com