r - 使用 shiny 和 react 查询访问 SQL 数据库

标签 r shiny rmysql

我想使用 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 基函数进行子集化...但我觉得自己很愚蠢,我已经盯着它看了一天了,但看不到它。也许我的整个代码是通过 shiny 查询 SQL 的糟糕方法?任何帮助表示赞赏。

啊天啊,好的..如果我改变这个:

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

为此:

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

然后我得到一个输出。抱歉,我想我的问题变成了如何在每次额外单击操作按钮时填充 df?

最佳答案

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

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

我正在做一些类似的事情,用 react 生成的交互项更新模型语句。我不得不使用 reactiveValues()isolate() 来让它工作。 Joe Cheng 有一个例子 Gist。

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

最好的, NF

关于r - 使用 shiny 和 react 查询访问 SQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31446500/

相关文章:

r - 如何在R图中以点为单位指定线宽?

r - ggparty 和 tidymodels,无法绘制最终节点图,模型没有附加数据(?)

r - 使用拼凑法排列多个地 block 时,如何将图例合并为地 block 大小图?

r - 没有默认值的 ShinyDashboard : Error : argument "value" is missing,

r - 选择传单上的标记,从 DT 行单击,反之亦然

mysql - 用 RMySQL 写日期

r - 创建一个具有不同列的元素计数的列

r - 为什么 Shiny 的应用程序使用突出显示功能和 selectize=TRUE 将虚假小部件添加到 Plotly 图表中?

mysql - 如何使用 dbReadTable 读取表的几列

RMySQL dbGetQuery() 内部函数留下未决结果