【发布时间】: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?
【问题讨论】: