2017-12-10 1 views
0

Das System ist ein Stichprobenauswahlsystem, in dem ich RStudio zur Entwicklung des Systems verwendet habe. Das System verhält sich wie folgt:Wie Download-Button in RShiny funktioniert, damit es die angezeigte Ausgabe herunterladen kann?

  1. Benutzer laden Excel-Datei oder PDF-Datei.
  2. Benutzer müssen zwischen zwei Radiobuttons wählen, eine ist "Low Risk" und eine andere ist "High Risk".
  3. Der Benutzer klicken Sie auf "Senden" -Taste.
  4. Das System wählt automatisch eine bestimmte Anzahl von Prüfstichproben aus, abhängig von der Anzahl der Zeilen der Tabelle in der Datei.
  5. Die Anzahl der ausgewählten Stichproben unterscheidet sich zwischen "geringes Risiko" und "hohes Risiko".
  6. Das System zeigt die ausgewählten Prüfmuster an.
  7. Der Benutzer kann die ausgewählten Audit-Beispiele herunterladen.

    library(shiny) 
    library(xlsx) 
    library(xlsxjars) 
    library(rJava) 
    library(pdftools) 
    library(tabulizer) 
    
    ui <- fluidPage(
    titlePanel("Audit Sample Selection System"), 
    sidebarLayout(
    sidebarPanel(
        fileInput("file1", "Choose file", accept = c(".xlsx", ".pdf")), 
        radioButtons("select", "Level of Risk", choices=list("Low Risk" = "low","High Risk" = "high")), 
        actionButton("submit", "Submit") 
    ), 
    mainPanel(
    tableOutput("contents"), 
    downloadButton("download", "Download") 
    ) 
    ) 
    ) 
    
    server <- function(input, output){ 
    
    mydf <- eventReactive(input$submit, { 
    
    # check for required values (for truthfulness)/ensure the values are available 
    req(input$select) 
    req(input$file1) 
    
    inFile <- input$file1 
    
    if (grepl("*.xlsx",inFile[1]) == TRUE){ 
    file.rename(inFile$datapath, paste(inFile$datapath, ".xlsx", sep = ""))   
    wb <- read.xlsx(paste(inFile$datapath, ".xlsx", sep = ""), 1) 
    
    nrow(wb) -> rows 
    if (input$select == "low") { 
    # sample for low risk (xlsx) 
    if (rows == 1) { 
        outdf <- wb[sample(rows, 1), ] 
    } else 
        if (rows >= 2 & rows <= 4) { 
        outdf <- wb[sample(rows, 1), ] 
        } else 
        if (rows >= 5 & rows <= 12) { 
         outdf <- wb[sample(rows, 2), ] 
        } else 
         if (rows >= 13 & rows <= 52) { 
         outdf <- wb[sample(rows, 5), ] 
         } else 
         if (rows >= 53 & rows <= 365) { 
          outdf <- wb[sample(rows, 15), ] 
         } else 
          if (rows > 365) { 
          outdf <- wb[sample(rows, 25), ] 
          } 
    } else { 
    # sample for high risk (xlsx) 
    if (rows == 1) { 
        outdf <- wb[sample(rows, 1), ] 
    } else 
        if (rows >= 2 & rows <= 4) { 
        outdf <- wb[sample(rows, 2), ] 
        } else 
        if (rows >= 5 & rows <= 12) { 
         outdf <- wb[sample(rows, 3), ] 
        } else 
         if (rows >= 13 & rows <= 52) { 
         outdf <- wb[sample(rows, 8), ] 
         } else 
         if (rows >= 53 & rows <= 365) { 
          outdf <- wb[sample(rows, 25), ] 
         } else 
          if (rows > 365) { 
          outdf <- wb[sample(rows, 40), ] 
          } 
    } 
    } else if (grepl("*.pdf",inFile[1]) == TRUE) { 
        outtable <- extract_tables(inFile$datapath) 
        outtable[[1]] <- outtable[[1]][-c(1,1),] # Remove header from the table on the first page 
        df <- do.call(rbind, outtable) # Turn matrix into data frame 
        nrow(df) -> rows 
        if (input$select == "low") { 
        # sample for low risk (pdf) 
    if (rows == 1) { 
        outdf <- df[sample(rows, 1), ] 
    } else 
        if (rows >= 2 & rows <= 4) { 
        outdf <- df[sample(rows, 1), ] 
        } else 
        if (rows >= 5 & rows <= 12) { 
         outdf <- df[sample(rows, 2), ] 
        } else 
         if (rows >= 13 & rows <= 52) { 
         outdf <- df[sample(rows, 5), ] 
         } else 
         if (rows >= 53 & rows <= 365) { 
          outdf <- df[sample(rows, 15), ] 
         } else 
          if (rows > 365) { 
          outdf <- df[sample(rows, 25), ] 
          } 
        } else { 
        # sample for high risk (pdf) 
    if (rows == 1) { 
        outdf <- df[sample(rows, 1), ] 
    } else 
        if (rows >= 2 & rows <= 4) { 
        outdf <- df[sample(rows, 2), ] 
        } else 
        if (rows >= 5 & rows <= 12) { 
         outdf <- df[sample(rows, 3), ] 
        } else 
         if (rows >= 13 & rows <= 52) { 
         outdf <- df[sample(rows, 8), ] 
         } else 
         if (rows >= 53 & rows <= 365) { 
          outdf <- df[sample(rows, 25), ] 
         } else 
          if (rows > 365) { 
          outdf <- df[sample(rows, 40), ] 
          } 
        } 
        } else { 
        NULL 
        } 
        }) 
    
        output$contents <- renderTable({ 
        mydf() 
        }) 
        } 
    
        shinyApp(ui = ui, server = server) 
    

Das Problem ist, ich weiß nicht, wie die Download-Schaltfläche, um so zu arbeiten, dass, wenn der Anwender auf die Schaltfläche ‚Download‘, die ausgewählten Prüfungsproben angezeigt werden heruntergeladen.

Antwort

0

Anstatt eine Download-Schaltfläche zu verwenden, können Sie das DT-Paket verwenden, um eine schöne Tabelle und die Erweiterung "buttons" zu erstellen, die das Herunterladen der Tabelle ermöglicht.

library(DT) 
# in server: 
output$contents <- DT::renderDataTable({ 
    datatable(mydf(), 
      extensions = 'Buttons', 
      options = list(dom = 'Bfrtip', buttons = 'excel')) 
}) 
# in ui: 
DT::dataTableOutput("contents") 

Siehe https://rstudio.github.io/DT/003-tabletools-buttons.html für weitere Informationen über die "Tasten" -Erweiterung.

Verwandte Themen