Блестящий динамический отфильтрованный фрейм данных / вывод таблицы при подключении к MySQL

#mysql #r #dataframe #shiny #reactive

#mysql #r #фрейм данных #блестящий #реактивный

Вопрос:

По сути, я пытаюсь отобразить фрейм данных в R, запрашивая его у MySQL.

У меня есть два фильтра, на основе которых значения фрейма данных / таблицы будут отличаться. Таблица реагирует на основе фильтров, выбранных пользователем.

ПОЛЬЗОВАТЕЛЬСКИЙ интерфейс

 ui <- fluidPage(fluidRow(
column(4,radioButtons("Stocks", "Stock Number",
choices = c(1: 2),selected='1')),

column(4,radioButtons("Funds", "Fund Name",
choices = list("W" = 1, "L" = 2),selected='1')),

column(4,checkboxGroupInput("Position", "Market Position", 
choices = c(1:5))),

tableOutput("values")
)
  

СЕРВЕР

 server <- function(input, output) 
{    
 tableValues<-reactive({
 df<-dbSendQuery(mydb,paste0("SELECT STOCKS,FUNDS,POSITION,INVESTMENTS FROM 
 SUMMARY WHERE USERNAME='1223' and STOCKS=",input$Stocks," AND 
 FUNDS='",input$Funds,"' 
 AND POSITION=",input$position,";"))
 return(df)
 })

output$values <- renderTable({
tableValues()})

}
  

Это то, что у меня есть сейчас, но, похоже, это не работает. Есть предложения о том, как отобразить фрейм данных / таблицу и сделать его реактивным на основе выбранных фильтров?

Спасибо!

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

1. Похоже, не работает — в чем фактическая ошибка или что происходит? работает ли этот запрос в не блестящей (интерактивной) среде?

2. Он выдает ошибку — «не удается принудительно преобразовать структуру класса («MySQLResult», package = «RMySQL»)» в data.frame». Есть ли какой-либо другой способ отображения таблицы?

Ответ №1:

Ошибка: error- "cannot coerce class 'structure("MySQLResult", package = "RMySQL")' to a data.frame" . Это потому, что вы не fetch отредактировали данные.

 server <- function(input, output) 
{    
 tableValues<-reactive({
 query<-dbSendQuery(mydb,paste0("SELECT STOCKS,FUNDS,POSITION,INVESTMENTS FROM 
 SUMMARY WHERE USERNAME='1223' and STOCKS=",input$Stocks," AND 
 FUNDS='",input$Funds,"' 
 AND POSITION=",input$position,";"))
 df = fetch(query, n = -1)
 return(df)
 })

output$values <- renderTable({
tableValues()})

}
  

https://www.rdocumentation.org/packages/DBI/versions/0.2-1/topics/dbSendQuery

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

1. Также это будет работать, когда у меня есть несколько входных данных, таких как флажок, верно?

2. В идеале так и должно быть, потому что они в любом случае являются частью вашей части запроса.

3. checkboxGroupInput возвращает значения, подобные, например — [1] «1» «2» «3» если мы выберем первые три числа. Поэтому пришлось изменить его на RadioButtons, который работал просто отлично.