【发布时间】:2016-09-09 22:29:52
【问题描述】:
我想找到一种在闪亮的 UI 中显示 llply 进度条的方法。 请看下面的代码。你有什么想法吗?
library(shiny)
library(plyr)
function_I_cant_edit <- function(){plyr::llply(LETTERS ,.fun=function(x){Sys.sleep(0.2)},.progress = "text")}
server<-shinyServer(function(input, output,session) {
observeEvent(input$go, {
progress <- shiny::Progress$new(session, min=1, max=15)
on.exit(progress$close())
progress$set(message = 'Calculation in progress')
function_I_cant_edit()
for (i in 1:15) {
progress$set(value = i)
Sys.sleep(0.1)
}
})
output$plot <- renderPlot({
plot(cars)
})
})
ui <- basicPage(
actionButton("go","PUSH ME"),
plotOutput("plot")
)
shinyApp(ui = ui, server = server)
一个想法是在 llply 中使用 progress="tk",但有没有最性感的方法?
另一个想法是在闪亮的应用程序中显示控制台输出......但我没有管理这个。
问候
编辑:
llpy 函数使用progress_tk() 或progress_text() 或progress_time()
所以我创建了一个 progress_shiny() 函数
progress_shiny <-function (title = "plyr progress", label = "Working...", ...)
{
n <- 0
tk <- NULL
list(init = function(x) {
tk <<- shiny::Progress$new(session,min=1, max=15)
tk$set(message = 'Calculation in progress')
}, step = function() {
n <<- n + 1
tk$set(value = n)
}, term = function() print("fin"))
}
我试过了:
server<-shinyServer(function(input, output,session) {
# session <<- session
observeEvent(input$go, {
# function_I_cant_edit()
llply(LETTERS ,.fun=function(x){Sys.sleep(0.2)},.progress = "shiny")
})
output$plot <- renderPlot({
plot(cars)
})
})
ui <- basicPage(
actionButton("go","PUSH ME"),
plotOutput("plot")
)
shinyApp(ui = ui, server = server)
但错误消息是“public_bind_env$initialize(...) 中的错误:objet 'session' introuvable”...
我想我正在寻找东西的路上;)
【问题讨论】:
-
plyr的进度条只是打印到控制台的文本,可以用capture.output捕获,但我认为您无法从@ 获取进度条987654326@ 到闪亮的用户界面。 -
Thks,我知道,但是 capture.output 不会是实时的..