ошибка при создании таблиц данных в блестящем приложении

#r #shiny

#r #блестящий

Вопрос:

Я создаю панель мониторинга с помощью блестящего приложения. Данные на панель мониторинга поступают из базы данных . Вот мой код:

 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)
  

Вот мой вывод: 1: https://i.stack.imgur.com/MWvQj.png
введите описание изображения здесь
, отображается боковая панель и главная панель, но когда я нажимаю на выпадающий список, данные не извлекаются из таблицы. выбрать ГЕОГРАФИЮ означает, что он должен предоставить все параметры в ГЕОГРАФИИ.
В выборе, если я упомяну choices = tbl $’GEOGRAPHY’, системный объект не найден.Я не хочу вручную вводить варианты, поскольку существует несколько значений. из выпадающего списка я должен выбрать.

боковая панель и главная панель отображают реактивные данные, которые не отображаются.

Ответ №1:

Возможно, вы можете использовать updateSelectInput для изменения choices после того, как ваши данные tbl1 будут доступны.

Я также добавил 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))
  })
  
}
  

Комментарии:

1. Спасибо. Это сработало одним способом. Но я хотел, чтобы сначала отображался весь мой набор данных, а затем фильтровал его.

2. Я не смог получить желаемый результат .. пробовал по-разному. В раскрывающемся списке вместо имен отображаются номера страниц.

3. Я получил результат, если я использую другой столбец, который является числом. Если я фильтрую по GEO_HD, он работает. Переменная, которую я пытаюсь отфильтровать, является символьным типом данных. Может быть, в selectinput я назначил тип dat. Спасибо за вашу помощь