如何使每个闪亮的radiobutton功能不同?

时间:2017-11-10 08:43:31

标签: r shiny rstudio

系统是审计样本选择系统,我使用RStudio开发系统。系统行为如下:

  1. 用户上传Excel文件或PDF文件。
  2. 用户需要在两个单选按钮之间进行选择,一个是“低风险”,另一个是“高风险”。
  3. 用户点击“提交”按钮。
  4. 系统会根据文件中表格的行数自动选择一定数量的审核样本。
  5. 选择的审核样本数量在“低风险”和“高风险”之间有所不同。
  6. 系统显示所选的审核样本。
  7. 这是没有放射线按钮功能的“低风险”代码:

    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")
      )
     )
    )
    
    server <- function(input, output){
    
    output$contents <- renderTable({
    
    input$submit
    
    isolate({
      inFile <- input$file1
    
      if (is.null(inFile[1])){
        return(NULL)
      } else 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 (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), ]
                } 
        outdf 
      } 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 (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), ]
                  } 
        outdf  
       }
      })
     })
    }
    
    shinyApp(ui = ui, server = server)
    

    这是为“高风险”选择审计样本的另一段代码:

    inFile <- input$file1
    
      if (is.null(inFile[1])){
        return(NULL)
      } else 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 (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), ]
                  } 
        outdf 
      } 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 (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), ]
                  } 
        outdf  
      }
    

    我的问题是我不知道如何使无线电按钮功能化,以便在“低风险”或“高风险”之间进行选择并点击“提交”按钮后,将相应地选择数量审核样本。 / p>

2 个答案:

答案 0 :(得分:3)

用相关的代码替换我的评论。您可以按return(outdf)

完成每段代码
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")
    )
  )
)

server <- function(input, output){

  mydf <- eventReactive(input$submit, {
    req(input$select)
    req(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") {
        # Create here your sample for low risk (xlsx)
      } else {
        # Create here your sample for high risk (xlsx)
      }
    } 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") {
        # Create here your sample for low risk (pdf)
      } else {
        # Create here your sample for high risk (pdf)
      }
    } else {
      NULL
    }
  })
  output$contents <- renderTable({
    mydf()
  })
}

shinyApp(ui = ui, server = server)

答案 1 :(得分:1)

我正准备写一个例子,当我完成时,qfazille已经回答了。虽然qfazille的回答更加详细,但我给了你一个例子,所以无论如何我发布了它。

library(shiny)

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(
htmlOutput("contents") # change output function depending on type
)
)
)

server <- function(input, output){

out<-eventReactive(input$submit,{

#validate(need(!is.null(input$file),"please choose a file"))

if (input$select=='low') {
  showout<-"dosomething" # replace this with your functions for 'low'
  }
else if (input$select=='high') {
  showout<-"dosomethingelse" # replace this with your functions for 'high'
  }

showout

})  

output$contents <- renderText({ # change render depending on type
  out()
  })

}

shinyApp(ui = ui, server = server)