在 Shiny 中使用 dbplyr 进行条件过滤

Conditional filtering using dbplyr in Shiny

我正在处理一个业务问题,我想根据列表中用户提供的输入,在闪亮的应用程序中过滤数据库中的数据。

这是仅在从数据库中收集数据后才有效的片段,这在计算上非常昂贵。

reactive({
my_database_data %>%
collect() %>%
filter(
      if (!!input$list != 'All')
        (branch == !!input$list
        ) else TRUE)
})

我想实现同样的目标,但直接从数据库中实现。

reactive({
my_database_data %>%
filter(
      if (!!input$list != 'All')
        (branch == !!input$list
        ) else TRUE)
})

不太确定上面的 if-else 语句。

这就是问题的解决方案。

reactive({
  # If 'All' not selected, filter
  if (input$list != 'All') {
    
    filter(my_database_data, branch == !!input$list)
    
  } else {
    
    my_database_data
    
  }
})

不确定 input$list 包含什么内容,很难提供准确的解决方案。部分借鉴@AaronSimumba 的回答,部分借鉴@IanGow 的评论,我建议如下:

reactive({

if(input$list == 'All'){
  result = my_database_data %>%
    collect()
} else {
  result = my_database_data %>%
    filter(branch == !!input$list) %>%
    collect()

})

这意味着如果指定了过滤器,则将在将数据绘制到 R 之前应用该过滤器。我不确定是否有任何替代方法可以在 collect 中使用数据之前将数据导入 R应用程序。这取决于您如何使用过滤后的数据。