#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, который работал просто отлично.