#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. Спасибо за вашу помощь