我尝试使用一个提交按钮在Shiny中加载两个excel数据集。
用户界面有一个侧边栏可以加载数据集和三个标签,以显示数据集和ggplot数字。
链接到第一个数据集时,我会选择一个工作表。接下来,我链接到第二个数据集。在我点击显示第二个数据集的用户界面中的第二个选项卡之前,我没有选择工作表。
然后我可以使用上传按钮,两个数据集显示在选项卡1和选项卡2中,而选项卡3显示数据集1的图表。
我的问题是,为什么在单击用户界面中的第二个标签之前,我无法看到第二个数据集的工作表选择菜单。
祝福
shinyUI(pageWithSidebar(
headerPanel("Claim Overview"),
sidebarPanel(
fileInput(inputId = "iFile", label = "Claims data", accept="application/vnd.ms-excel"),
tags$hr(),
uiOutput(outputId = "ui"),
fileInput(inputId = "iFileIndex", label = "Inflation data", accept="application/vnd.ms-excel"),
tags$hr(),
uiOutput(outputId = "uiIndex"),
submitButton("Upload!", icon("refresh"))
),
mainPanel(
tabsetPanel(
tabPanel("Claim data", dataTableOutput(outputId = "contents")),
tabPanel("Index data", dataTableOutput(outputId = "contentsIndex")),
tabPanel("Claim plot", plotOutput(outputId = "ClaimPlot"))
))
))
shinyServer(function(input, output) {
chooseFile <- reactive({
inFile <- input$iFile
if (!is.null(inFile)) {
wb <- loadWorkbook(inFile$datapath)
sheets <- getSheets(wb)
output$ui <- renderUI({
list(
selectInput(inputId = "sheet", label = "Select a sheet:", choices = sheets),
tags$hr()
)
})
return(list(path = inFile$datapath))
} else {return(NULL)}
})
chooseIndexFile <- reactive({
inFile <- input$iFileIndex
if (!is.null(inFile)) {
wb <- loadWorkbook(inFile$datapath)
sheets <- getSheets(wb)
output$uiIndex <- renderUI({
list(
selectInput(inputId = "sheet", label = "Select a sheet:", choices = sheets),
tags$hr()
)
})
return(list(path = inFile$datapath))
} else {return(NULL)}
})
output$contents <- renderDataTable({
objFile <- chooseFile()
if (!is.null(objFile)) {
Sheet <- input$sheet
if (!is.null(Sheet)){
wb <- loadWorkbook(objFile$path)
dat <- readWorksheet(wb, Sheet)
return(dat)
}
} else {return(NULL)}
})
output$contentsIndex <- renderDataTable({
objFile <- chooseIndexFile()
if (!is.null(objFile)) {
Sheet <- input$sheet
if (!is.null(Sheet)){
wb <- loadWorkbook(objFile$path)
dat <- readWorksheet(wb, Sheet)
return(dat)
}
} else {return(NULL)}
})
readClaimData <- function(){
objFile <- chooseFile()
if (!is.null(objFile)) {
Sheet <- input$sheet
if (!is.null(Sheet)){
wb <- loadWorkbook(objFile$path)
dat <- readWorksheet(wb, Sheet)
return(dat)
}
} else {return(NULL)}
}
readIndexData <- function(){
objFile <- chooseIndexFile()
if (!is.null(objFile)) {
Sheet <- input$sheet
if (!is.null(Sheet)){
wb <- loadWorkbook(objFile$path)
dat <- readWorksheet(wb, Sheet)
return(dat)
}
} else {return(NULL)}
}
output$ClaimPlot <- renderPlot({
x <- readClaimData()
ggplot(data = readClaimData(), aes(x=ClaimNo, y=Claim, fill = State)) + geom_bar(colour = "black", stat = "identity", position = position_dodge()) + facet_grid(Year ~ .)
})
})
答案 0 :(得分:0)
我找到了一个非常简单的解决方案:
将outputOptions(output, "contentsIndex", suspendWhenHidden=FALSE)
放在Server.R
之后的output$contentsIndex
。{/ p>
这会停止暂停Sheet选项,然后在加载第二个数据集后立即显示它。