在 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应用程序。这取决于您如何使用过滤后的数据。
我正在处理一个业务问题,我想根据列表中用户提供的输入,在闪亮的应用程序中过滤数据库中的数据。
这是仅在从数据库中收集数据后才有效的片段,这在计算上非常昂贵。
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应用程序。这取决于您如何使用过滤后的数据。