Как получить значение выбранного варианта в раскрывающемся списке реактивных действий? - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть реактивный раскрывающийся список в Rshiny со значениями для 2016–2019 гг. После того, как пользователь выбрал год, год должен быть передан в SQL-запрос с указанием года в качестве параметра.

Итак, я попробовал строку, приведенную ниже (где unique_vales2 содержит значения года)

 ---
 title: "Dashboard"
 output: 
 flexdashboard::flex_dashboard:
 orientation: rows
 vertical_layout: fill
 social: [ "twitter", "facebook", "menu"]
 runtime: shiny

 ```{r}
 mydb = dbConnect(MySQL(), user='xxx', password='xxx',dbname='xxx', 
 host='xxx')
 selectInput("year", "Choose year", choices = unique_values2) 
 num <- reactive(as.integer(input$year))
 rs=dbSendQuery(mydb,paste("select * from employees where Year=",num," group 
 by job;"))
 result=fetch(rs,n=-1)

 ```

Но когда я попытался использовать значение num в SQL-запросе, как указано выше,

Показывает:

Ошибка: невозможно привести тип 'замыкание' к вектору типа 'символ'.

Любойобойти это?Заранее спасибо.

1 Ответ

0 голосов
/ 19 февраля 2019

Предположим, что приведенные ниже данные находятся в вашей таблице MySQL employees, поскольку у меня нет фактических данных.

dput(employees)
structure(list(id = 1:12, names = structure(1:12, .Label = c("aa", 
"bb", "cc", "dd", "ee", "ff", "gg", "hh", "ii", "jj", "kk", "ll"
), class = "factor"), year = c(2016, 2016, 2017, 2017, 2018, 
2018, 2016, 2018, 2017, 2019, 2019, 2019)), .Names = c("id", 
"names", "year"), row.names = c(NA, -12L), class = "data.frame")

Ниже приведенный код поможет вам в вашем требовании

library(shiny)
library(DBI)
library(pool)
pool <- dbPool(drv = RMySQL::MySQL(),dbname = "db_name",host = "localhost",username = "user_name",password = "password", port = 3306, unix.sock = "/var/run/mysqld/mysqld.sock")

ui <- fluidPage(
  uiOutput("years"),
  tableOutput("mytable")
)

server <- function(input, output, session) {
  output$years <- renderUI({
    unique_values2 <- c(2016:2019)
    selectInput("year", "select year", choices = unique_values2)
  })

results <- reactive({
  df <- dbGetQuery(pool, paste0("SELECT * FROM employees WHERE year = ", input$year ," ;"))
  return(df)
})
output$mytable <- renderTable(results())
}

shinyApp(ui, server)

Таквывод таблицы будет меняться в зависимости от года, который мы выбираем из выпадающего списка.

...