我的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查询依赖于一些被动输入。我该如何解决这个错误?
答案 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
})
})