使用带反应式查询的闪亮访问SQL数据库

时间:2015-07-16 06:13:03

标签: r shiny rmysql

我想使用Shiny让用户通过访问SQL数据库来构建数据框。我希望它以下列方式工作(但愿意接受建议):

  • ID中的用户类型(其编号)
  • 用户按下操作按钮
  • 生成无效查询
  • 发送查询并检索数据,并将其添加到数据框
  • 下一个ID中的用户类型......

这是我的尝试:

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")
  )
)))

服务器

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() })
  })  

当我运行时,我可以看到Id和查询都将正确打印。但是,当app第一次运行时,我收到此错误:

error in evaluating the argument 'statement' in selecting a method for function 'dbGetQuery': Error:

然后当我输入晶圆ID时,我得到:

Error in xi[[j]] : object of type 'closure' is not subsettable

我从这些帖子中得知:

R shiny ERROR: object of type 'closure' is not subsettable

Error in <my code> : object of type 'closure' is not subsettable

我可能试图在没有定义变量名的情况下尝试对R基函数进行子集...但我觉得很愚蠢,我已经盯着它看了一天而且看不到它。也许我的整个代码是一个通过闪亮查询SQL的坏方法?任何帮助赞赏。

啊,啊,好吧..如果我改变了这个:

wq <- reactive({ rbind(wq, query( a() )) })

到此:

wq <- reactive({  query( a() ) })

然后我得到一个输出。所以对不起,我想我的问题是如何在每次额外点击动作按钮时填充df?

1 个答案:

答案 0 :(得分:0)

将您的最终对象存储在您定义为的列表中:

wq<- reactiveValues()
....
isolate()

我正在研究类似的事情,用反应生成的交互术语更新模型语句。我不得不使用reactiveValues()isolate()来使其发挥作用。 Joe Cheng有一个例子Gist。

这是一个链接。也许它会帮助你。 https://gist.github.com/jcheng5/eaedfed5095d37217fca

最佳, NF