尝试在 Shiny 应用程序中显示来自 SQL Server 查询的数据框时出现问题

Posted

技术标签:

【中文标题】尝试在 Shiny 应用程序中显示来自 SQL Server 查询的数据框时出现问题【英文标题】:Problem trying to display a data frame from an SQL Server query within a Shiny app 【发布时间】:2020-10-04 23:16:11 【问题描述】:

我想在 Shiny 中查询一个 SQL Server 数据库。用户必须选择一些带有一些小部件的项目来构建 SQL 查询,然后,由操作按钮触发,查询的结果存储为数据框并用作 renderTable 函数的输入。无论我做什么来修复它,我总是会收到消息:

无法将“闭包”类型强制转换为“字符”类型的向量。

你能给我一些建议吗?

这是我的代码:

library(shiny)
library(RODBC)

# Builds conection chain ----

conection <- paste0('driver=', DriverDB, '; ',
                    'server=', myServerDB, '; ',
                    'database = ', myDataBase, '; ',
                    'uid = ', myUser, '; ',
                    'pwd = ', myPassword, '; ',
                    'trusted_connection = true')
     
# Define UI ----

ui <- fluidPage(
  titlePanel()),

  sidebarLayout(  
    sidebarPanel(          
      radioButtons(...),                   
      selectInput(...),               
      dateRangeInput(...),
      
      actionButton('execute_query', 'Execute query'),

    ),
    mainPanel(    
      tableOutput('result')       
    )
  )
)
# Define server logic ----

server <- function(input, output) 
  
  myQuery <- reactive('builds query expression from widgets inputs')  
  
  myData <- reactive(
    req(input$execute_query)
    result <- NULL
    channel_db <- odbcDriverConnect(conection)
    result <- sqlQuery(channel_db, myQuery)
    odbcClose(channel_db)
    result
  ) 
    
  output$result <- renderTable(myData())  


# Run the app ----

shinyApp(ui = ui, server = server)

我在 R 控制台中检查了 SQL 查询和连接的有效性,它们工作正常。

【问题讨论】:

【参考方案1】:

由于myQuery 是响应式数据,您需要将其视为一个函数,就像您稍后为myData 所做的那样。

用途:

  myData <- reactive(
    req(input$execute_query)
    result <- NULL
    channel_db <- odbcDriverConnect(conection)
    result <- sqlQuery(channel_db, myQuery()) # <-- the only change, add ()
    odbcClose(channel_db)
    result
  ) 

知道“闭包”类似于“函数”可能很有用。而且,出于所有意图和目的,响应式数据和响应式组件的外观和行为都类似于函数。

【讨论】:

太棒了!非常感谢,r2evans! 如果这回答了您的问题,请accept it。谢谢!

以上是关于尝试在 Shiny 应用程序中显示来自 SQL Server 查询的数据框时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

R Shiny 加速数据加载

当我有选择 > 1000 时,Shiny 不会向我显示整个 selectInput

在 R Shiny 中显示/隐藏整个盒子元素

Shiny R:无法显示情节

Shiny-登录后看不到我的html页面?

在 Shiny App 的右侧嵌入图像徽标