RShiny SQL数据帧到表

时间:2017-06-13 18:57:12

标签: r shiny

我的R Shiny应用程序文件server.R中有以下代码

library(shiny)
library(RODBC)

shinyServer(function(input, output) {

  myData <- reactive({

    conn <- odbcDriverConnect("driver={SQL Server};server=xxx;database=xxx;uid=xxx;pwd=xxx")

    q <- paste("SELECT * FROM dbo.players")

    res <- sqlQuery(channel=conn, query=q)

    res

  })

  output$tbTable <- renderTable({
    myData
  })
})

我一直收到错误:

Warning: Error in as.data.frame.default: cannot coerce class "c("reactiveExpr", "reactive")" to a data.frame
Stack trace (innermost first):
    79: as.data.frame.default
    78: as.data.frame
    77: origRenderFunc
    76: output$tbTable
     1: runApp

我是R的新手,并不真正了解如何进行转换。我的理解是res是data.frame类型,renderTable将vector作为参数。它也包含在一个反应​​函数中,因为我最终想让我的SQL查询依赖于一些被动输入。我该如何解决这个错误?

1 个答案:

答案 0 :(得分:0)

感谢@patrik和@Batanichek,我想出了以下解决方案,效果很好:

library(shiny)
library(RODBC)

shinyServer(function(input, output, session) {


  myData <- reactive({

    conn <- odbcDriverConnect("driver={SQL Server};server=xxx;database=xxx;uid=xxx;pwd=xxx")

    q <- paste("SELECT * FROM dbo.players")

    res <- sqlQuery(channel=conn, query=q)

    odbcClose(conn)

    res

  })

  output$view <- renderTable({
    head(myData(), input$rows) # render only the first (input$rows) rows
  })
})