отправленный Джо Ченгом. Это может помочь кому-то.

приведен пример кода, который принимает два ввода: 1) входной файл и 2) ввод числа строк. После нажатия кнопки «Анализ» выходные данные команды сервера возвращаются в «Таблицу» на вкладке «Результаты». Это простой пример, когда команда будет выполнена быстро и переключится на панель вкладок «Результаты».

НижеприведенноеwithProgress Код показывает только индикатор выполнения в течение установленного времени и исчезает, а затем выполняется фактический код. Я хотел бы показать «Сообщение о состоянии» или «Индикатор выполнения» при нажатии «Анализ» и показать, пока команда выполняется. Пока текущий индикатор выполнения запущен, текущий пользователь (другие пользователи могут использовать приложение) не может выполнять какие-либо действия из боковой панели. Потому что в реальном приложении боковая панель имеет больше элементов меню, которые выполняют подобные задачи, и каждая задача имеетAnalyze кнопка. Если пользователю разрешено просматривать страницы боковой панели и нажиматьAnalyze тогда приложение будет перегружено выполнением нескольких задач. В идеале функциональность индикатора выполнения следует использовать с несколькими кнопками actionButton.

Я читаю блоги оasync но не в состоянии поставить правильный код в нужном месте. любая помощь ценится за вознаграждение !!

library(shiny)
library(shinydashboard)
sidebar <- dashboardSidebar(width = 200,
                    sidebarMenu(id = "tabs",
                                menuItem(
                                  "File", tabName = "tab1", icon = icon("fas fa-file")
                                )))
body <- tabItem(tabName = "tab1",
        h2("Input File"),
        fluidRow(
          tabPanel(
            "Upload file",
            value = "upload_file",
            fileInput(
              inputId = "uploadFile",
              label = "Upload Input file",
              multiple = FALSE,
              accept = c(".txt")
            ),
            checkboxInput('header', label = 'Header', TRUE)
          ),
          box(
            title = "Filter X rows",
            width = 7,
            status = "info",
            tabsetPanel(
              id = "input_tab",
              tabPanel(
                "Parameters",
                numericInput(
                  "nrows",
                  label = "Entire number of rows",
                  value = 5,
                  max = 10
                ),
                actionButton("run", "Analyze")
              ),
              tabPanel(
                "Results",
                value = "results",
                navbarPage(NULL,
                           tabPanel(
                             "Table", DT::dataTableOutput("res_table"), 
icon = icon("table")
                           )),
                downloadButton("downList", "Download")
              )
            )
          )
        ))
ui <-
shinyUI(dashboardPage(
dashboardHeader(title = "TestApp", titleWidth = 150),
sidebar,dashboardBody(tabItems(body))
))


server <- function(input, output, session) {
file_rows <- reactiveVal()

observeEvent(input$run, {
withProgress(session, min = 1, max = 15, {
  setProgress(message = 'Analysis in progress',
              detail = 'This may take a while...')
  for (i in 1:15) {
    setProgress(value = i)
    Sys.sleep(0.5)
  }
})
system(paste(
  "cat",
  input$uploadFile$datapath,
  "|",
  paste0("head -", input$nrows) ,
  ">",
  "out.txt"
),
intern = TRUE)
head_rows <- read.delim("out.txt")
file_rows(head_rows)
  })

observeEvent(file_rows(), {
updateTabsetPanel(session, "input_tab", "results")
output$res_table <-
DT::renderDataTable(DT::datatable(
file_rows(),
options = list(
  searching = TRUE,
  pageLength = 10,
  rownames(NULL),
  scrollX = T
  )
  ))
 })

output$downList <- downloadHandler(
filename = function() {
paste0("output", ".txt")
}, content = function(file) {
write.table(file_rows(), file, row.names = FALSE)
}
)
}

shinyApp(ui = ui, server = server)

Ответы на вопрос(3)

Ваш ответ на вопрос