如何在R SHINY中将输入变量传递给SQL语句? [英] How to pass input variable to SQL statement in R shiny?

查看:14
本文介绍了如何在R SHINY中将输入变量传递给SQL语句?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

通常,可以使用粘贴将变量传递给SQL语句。有趣的是,这不适用于R SHINY中的输入变量。使用下面的代码,我得到以下错误消息。我如何解决此问题?

.getReactiveEnvironment()$currentContext()中出错: 如果没有活动的反应性上下文,则不允许操作。)你试着去做 只能从反应式表达式或观察器内部完成的操作。)

--ui.R--

shinyUI(bootstrapPage(

  selectInput(inputId = "segment",
          label = "segment",
          choices = c(1, 2, 3, 4),
          selected = 1),

  plotOutput(outputId = "main_plot", height = "300px")

))


--server.R--

shinyServer(function(input, output) {

     database <- dbConnect(MySQL(), group= "zugangsdaten", dbname= 'database')

     input<- input$segment

     table <- dbGetQuery(database, statement = 
                      paste("
                      SELECT a,b FROM table1
                      WHERE id = ",input,"
                      AND created_at>='2015-08-01'
                      "))

  output$main_plot <- renderPlot({

    plot(a,b)

    })
})

推荐答案

需要在反应性上下文中评估数据查询。

一种方法是将数据查询本身移动到renderPlot()上下文中,例如

--server.R--

shinyServer(function(input, output) {

 database <- dbConnect(MySQL(), group= "zugangsdaten", dbname= 'database')

 output$main_plot <- renderPlot({

   table <- dbGetQuery(database, statement = 
              paste("
                SELECT a,b FROM table1
                WHERE id = ",input$segment,"
                AND created_at>='2015-08-01'
              "))

    plot(table$a,table$b)

 })

})

不过,最好是为数据构建一个无功导体,当有任何更新发生时,该数据可以评估一次,并在多个无功端点中重复使用(详细信息请参见here)。

如下所示:

--server.R--

shinyServer(function(input, output) {

 database <- dbConnect(MySQL(), group= "zugangsdaten", dbname= 'database')

 table <- reactive({
            dbGetQuery(database, statement = 
              paste("
                SELECT a,b FROM table1
                WHERE id = ",input$segment,"
                AND created_at>='2015-08-01'
              ")
            )
          })

 output$main_plot <- renderPlot({

    plot(table()$a,table()$b)

 })

}) 

这篇关于如何在R SHINY中将输入变量传递给SQL语句?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆