Shiny - 使用dplyr和无效值的postgres数据库查询

时间:2017-03-30 14:00:02

标签: postgresql shiny dplyr

我正在使用postgres数据库来创建一个闪亮的应用程序,而且我无法让dplyr查询工作。

我有以下反应。 si.division是一个数据框,输入$ si_division是一个选择输入:

si_division_selected <- reactive({
  si.division %>% 
    filter(division_name %in% input$si_division) %>% 
    select(division_code) %>% 
    unlist(use.names = FALSE)
})

我试图使用src_pool

将其传递给dplyr查询
industry_division_code <- src_pool(pool) %>% tbl("si_alldata") %>%
      translate_sql(division_code %in% si_division_selected()) %>% 
      select(industry_code)

我收到以下错误:

  

UseMethod中的错误:没有适用的方法来选择_&#39;适用于   课程对象&#34; c(&#39; sql&#39;,&#39;字符&#39;)

我也尝试过:

 industry_division_code <- src_pool(pool) %>% tbl("si_alldata") %>%
      filter(division_code %in% si_division_selected()) %>%
      select(industry_code)

返回:

  

postgresqlExecStatement(conn,statement,...)出错:RS-DBI   驱动程序:(无法检索结果:错误:语法错误在或   靠近&#34; SI_DIVISION_SELECTED&#34;第5行:在哪里(&#34; division_code&#34; IN   SI_DIVISION_SELECTED()))

如果我将文件加载到R而不是使用数据库,我没有问题:

industry_division_code <- si_alldata %>%
    filter(division_code %in% si_division_selected()) %>%
    select(industry_code)

1 个答案:

答案 0 :(得分:0)

我认为如果你想继续使用si_division_selected()作为过滤器中传递的值,那么你应该能够使用rlang包来强制评估函数,所以行看起来像这样:filter(division_code %in% !! si_division_selected())。虽然,您目前只将结果保存到变量的解决方案将是我的首选途径。