2016-09-09 10 views
1

光沢のあるUIの中にプログレスバーを表示する方法を知りたいと思います。 コードをご覧ください。あなたは何か考えていますか?光沢のあるプログレスバーとプログレスバーを同期させる方法

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"を使用することですが、セクシーな方法がありますか?

別のアイデアは、光沢のあるアプリでコンソールの出力を表示することです...しかし、私はこれを管理しませんでした。

よろしく

EDIT:

llpy機能使用progress_tk()またはprogress_text()またはprogress_time()

だから私は

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")) 
} 

progress_shiny()関数を作成し、私は試しました:

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の$の初期化(...)でエラーが発生しました:オブジェ "であるセッションのintrouvable」...

私は何かを見つける方法のイム考える;)

+0

'plyr'からプログレスバーが' capture.output'で捕捉することができるコンソールに印刷されたテキストだけであるに貢献このように、しかし私は 'plyr'から 'Shiny UI'にプログレスバーを得ることはできないだろうと思っています。 – Carl

+0

Thks、私はそれを知っていますが、capture.outputはリアルタイムではありません。 –

答えて

2

にあなたがすることができますたとえば、progressオブジェクトを光沢のあるオブジェクトから取得するカスタムの進行ハンドラを作成します。

progress_shiny <-function (progress, step = 1){ 
    list(
    init = function(n){}, 
    step = function() { 
     progress$set(progress$getValue() + step) 
    }, 
    term = function(){} 
) 
} 

そして、サーバーコードでこれを使用してください。

observeEvent(input$go, { 
    progress <- shiny::Progress$new(session, min=0, max=50) 
    on.exit(progress$close()) 

    # use the main progress outside of llply 
    progress$set(value = 1) 
    Sys.sleep(1) 
    progress$set(value = 20) 

    # then pass it along so that llply steps 
    # contribute to the main progress 
    llply(LETTERS ,.fun=function(x){ 
    Sys.sleep(0.2) 
    }, .progress = progress_shiny(progress)) 

}) 

llply内部プログレスバーがメインプログレスバー

関連する問題