【发布时间】:2021-03-11 10:44:07
【问题描述】:
我使用dplyr(0.8.3版本)查询数据。该查询包括在查询开头定义的参数,如下面的第一个表示所示。最重要的是,我想在列表中收集参数,如第二个表示。第一个和第二个示例从数据框中查询数据,工作正常。但是,当我想使用保存在列表中的参数从数据库中查询数据时,SQL 转换会产生无法用于从数据库中查询数据的非工作 SQL。
有没有办法将列表条目合并到dplyr 管道中以从数据库中查询数据?
library(dplyr)
library(dbplyr)
library(RSQLite)
# 1. Data frame: value
a <- 1
mtcars %>% filter(vs == a) # Works
# 2. Data frame: list value
input <- list()
input$a <- 1
mtcars %>% filter(vs == input$a) # Works
# 3. Database: value and list value
con <- DBI::dbConnect(RSQLite::SQLite(), path = ":memory:")
copy_to(con, mtcars, "mtcars", temporary = FALSE)
db_mtcars <- tbl(con, "mtcars")
db_mtcars %>% filter(vs == a) %>% show_query() %>% collect() # Works
db_mtcars %>% filter(vs == input$a) %>% show_query() %>% collect() # Does not work
db_mtcars %>% filter(vs == input[1]) %>% show_query() %>% collect() # Does not work
db_mtcars %>% filter(vs == input[[1]]) %>% show_query() %>% collect() # Does not work
我的问题的背景是我想在shiny 应用程序中处理和分析数据。我发现开发用于处理应用程序外部数据的代码然后在应用程序中包含代码会更容易。然而,随着输入数量的增加,这项任务变得越来越困难。对于开发,我的想法是定义一个名为“输入”的列表,以便我可以将代码复制并粘贴到应用程序中。但是,我偶然发现了上面描述的问题。也非常欢迎对替代开发工作流程提出建议。
【问题讨论】: