Acessando banco de dados SQL usando brilhante com consulta reativa
Eu quero usar o Shiny para permitir que um usuário construa um quadro de dados acessando um banco de dados SQL. Quero que ele funcione da seguinte maneira (mas aberto a sugestões):
Tipos de usuário em ID (é um número)Usuário pressiona botão de açãoConsulta reativa é geradaA consulta é enviada e os dados são recuperados e adicionados ao quadro de dadosTipos de usuário no próximo ID ...Aqui está a minha tentativa:
UI
library(markdown)
shinyUI(fluidPage(
titlePanel("Generic grapher"),
sidebarLayout(
sidebarPanel(
numericInput("wafer", label = h3("Select wafer ID:"), value = NULL),
actionButton("do", "An action button")
),
mainPanel(
verbatimTextOutput("value"), verbatimTextOutput("que"), dataTableOutput(outputId="pos")
)
)))
Servidor
library(RMySQL)
library(DBI)
library(sqldf)
con = dbConnect(RMySQL::MySQL(), dbname="Test_DB", username="pete", password="xx", host="xx", port=3306)
query <- function(...) dbGetQuery(con, ...)
wq = data.frame()
df = data.frame()
shinyServer(function(input, output){
d <- eventReactive(input$do, { input$wafer })
output$value <- renderPrint({ d() })
a <- reactive({ paste("Select id from wafer where wafer_id=",d(), sep="") })
output$que <- renderPrint({ a() })
wq <- reactive({ rbind(wq, query( a() )) })
output$pos <- renderDataTable({ wq() })
})
Quando executo, vejo que o ID e a consulta serão impressos corretamente. No entanto, recebo esse erro quando o aplicativo é executado primeiro:
error in evaluating the argument 'statement' in selecting a method for function 'dbGetQuery': Error:
Então, quando digito um ID de bolacha, recebo:
Error in xi[[j]] : object of type 'closure' is not subsettable
Eu sei dessas postagens:
R ERRO brilhante: objeto do tipo 'fechamento' não é subconfigurável
Erro no <meu código>: o objeto do tipo 'encerramento' não é sub-configurável
Que eu estou provavelmente tentando subconjunto de uma função base R sem definir o nome da variável ... mas eu me sinto estúpido, eu estou olhando para ele há um dia e não consigo vê-lo. Talvez meu código inteiro seja uma maneira ruim de consultar o SQL de forma brilhante? Qualquer ajuda apreciada.
Ah dam, ok .. se eu mudar isso:
wq <- reactive({ rbind(wq, query( a() )) })
para isso:
wq <- reactive({ query( a() ) })
Então eu recebo uma saída. Desculpe, acho que minha pergunta muda para como preencher um df com cada clique adicional no botão de ação?