Прогресс-бар в R - PullRequest
       10

Прогресс-бар в R

0 голосов
/ 22 февраля 2019

Я пытаюсь создать индикатор прогресса в моем интерфейсе Shiny.

Конкретно, у меня есть блестящий интерфейс, где пользователь может выбирать значения.Когда он нажимает «закрыть и запустить», интерфейс закрывается и вызывается несколько сценариев.

Проблема в том, что моя панель загрузки выполняется при открытии приложения Shiny, а не при нажатии кнопки.

Я бы хотел, чтобы индикатор выполнения запускался после того, как он нажал кнопку, и развивался до конца сценария, а затем закрывался.

Вот код app.R:

require(shiny)
require(shinyWidgets)
require(shinyjs)

pb <- winProgressBar(title="Example progress bar", label="0% done", min=0, max=100, initial=0)

jscode <- "shinyjs.closeWindow = function() { window.close(); }"

if (interactive()) {
  # Open this application in multiple browsers, then close the browsers
  shinyApp(
    #Ui part
    ui <- pageWithSidebar(

      headerPanel("Filters for Datorama"),
      sidebarPanel(
        dateInput(inputId = "startDate", label = "Start date : ", value = "2018-12-01", format = "yyyy/mm/dd"),
        dateInput(inputId = "endDate", label = "End date : ", value = "2018-12-31", format = "yyyy/mm/dd"),
        selectInput(inputId = "client", label = "Choose your client : ", c("ING" = "ING", "Pernod-Ricard" = "Pernod-Ricard")),
        selectInput(inputId = "brand", label = "Choose your template : ", c("Carat" = "Carat", "Amplifi" = "Amplifi", "iProspect" = "iProspect", "Vizeum" = "Vizeum")),
        selectInput(inputId = "medium", label = "Choose the medium type : ", c("Social Post" = "Social Post")),
        textInput(inputId = "iplan", label = "Enter the plan ID of your campaign : "),
        useShinyjs(),
        extendShinyjs(text = jscode, functions = c("closeWindow")),
        actionButton("close", "Close and run"),
        for(i in 1:100) {
          Sys.sleep(0.1) # slow down the code for illustration purposes
          info <- sprintf("%d%% done", round((i/100)*100))
          setWinProgressBar(pb, i/(100)*100, label=info)
        }
      ),
      mainPanel()

    ),

    #Server part
    server = function(input, output, session) {

      observe({
        startDate <<- input$startDate
        endDate <<- input$endDate
        client <<- input$client
        brand <<- input$brand
        medium <<- input$medium
        iPlan <<- input$iplan
      })

      onStop(function() 
        source("C:/Users/RPeete01/Desktop/Automated reporting/Social/Scripts/DatoramaSocial.R"))

      observeEvent(input$close, {
        close(pb)
        js$closeWindow()
        stopApp()
      })
    }
  )
}
...