r-如何使每个闪亮的单选按钮功能不同



该系统是一个审计样本选择系统,我在其中使用RStudio开发了该系统。系统的行为如下:

  1. 用户上传Excel文件或PDF文件
  2. 用户需要在两个单选按钮之间进行选择,一个是"低风险",另一个为"高风险">
  3. 用户点击"提交"按钮
  4. 系统会根据文件中表的行数自动选择一定数量的审核样本
  5. 选择的审计样本数量在"低风险"one_answers"高风险"之间有所不同
  6. 系统显示选定的审核示例

这是无功能单选按钮的"低风险"代码:

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  
}

我的问题是,我不知道如何让单选按钮发挥作用,这样在"低风险"或"高风险"之间选择并单击"提交"按钮后,就会相应地选择审计样本的数量。

用相关代码替换我的注释。您可以通过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)

我正要写一个例子,当我写完时,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)

最新更新