首页 > 解决方案 > 在 Shiny 应用程序中创建数据表时出错

问题描述

我正在使用闪亮的应用程序创建仪表板。仪表板的数据来自数据库。这是我的代码:

library(shiny)
library(DBI)
library(RODBC)

ui <- fluidPage( titlePanel(title=(div(tags$a("Annual  Report"))), windowTitle = "Annual  Report"),
               sidebarLayout(
                        sidebarPanel(
                                                    
                    selectInput("GEOGRAPHY","SELECT GEOGRAPHY",choices = 'GEOGRAPHY')
                                ) ,
   
   mainPanel(tableOutput("tbl") 
   ) 
               )
) 
server <- function(input, output,session) {
    output$tbl <- renderTable({
                conn1 <- odbcConnect("database name", pwd = "pwd")
           
        tbl1 <-  sqlQuery(conn1, paste("select * from tablename"))
    })
}

shinyApp(ui, server)

这是我的输出: 1https ://i.stack.imgur.com/MWvQj.png 在此处输入图像描述 侧栏和主面板正在显示,但是当我单击下拉菜单时,数据并未从表中提取。选择 GEOGRAPHY 意味着它必须给出 GEOGRAPHY 中的所有选项。在选项中,如果我提到选项 = tbl$'GEOGRAPHY' 它找不到 sys 对象。我不想手动输入选项,因为有几个值。从下拉列表中我必须选择。

侧边栏和主面板显示反应数据未显示。

标签: rshiny

解决方案


也许您可以使用在您的数据可用后updateSelectInput进行更改。choicestbl1

我还在odbcClose查询后添加,subset因此显示的表格将根据所选GEOGRAPHY选项显示结果。

编辑:您可以将“全部”选项添加到您的selectInput. 如果选择“全部”,则将显示所有数据。否则,它将过滤选择。

server <- function(input, output, session) {
  
  tbl1 <- reactive({
    conn1 <- odbcConnect("database name", pwd = "pwd")
    data <- sqlQuery(conn1, paste("select * from tablename"))
    odbcClose(conn1)
    data
  })
  
  output$tbl <- renderTable({
    if (input$GEOGRAPHY != "All") {
      subset(tbl1(), GEOGRAPHY == input$GEOGRAPHY)
    } else {
      tbl1()
    }
  })
  
  observe({
    updateSelectInput(session, "GEOGRAPHY", choices = c("All", tbl1()$GEOGRAPHY))
  })
  
}

推荐阅读