【问题标题】:Acessing SQL database using shiny with reactive query使用 Shiny 和响应式查询访问 SQL 数据库
【发布时间】:2015-10-05 10:39:18
【问题描述】:

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

  • 用户输入 ID(数字)
  • 用户按下操作按钮
  • 生成响应式查询
  • 发送查询并检索数据,并添加到数据帧中
  • 下一个 ID 中的用户类型...

这是我的尝试:

用户界面

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 和查询都将正确打印。但是,当应用程序首次运行时出现此错误:

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?

【问题讨论】:

    标签: r shiny rmysql


    【解决方案1】:

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

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

    我正在处理类似的事情,即使用反应性生成的交互术语更新模型语句。我必须使用reactiveValues()isolate() 才能让它工作。 Joe Cheng 有一个示例 Gist。

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

    最好, NF

    【讨论】:

    • 另外,您可能没有在启动时捕捉到对象的 NULL 状态。这也显示在要点中。我想添加的有用提示。无论如何,祝你好运!
    • 嗨。是的,谢谢我最终设法找到了这个,一切似乎都有效。我最近开始遇到问题,所以我将发布一个单独的问题。干杯。皮特
    • 酷豆。继续坚持下去。我们都与 R 一起奋斗。 --NF
    猜你喜欢
    • 2016-06-17
    • 2017-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多