我正在filter()使用%in%但dplyr翻译查询的方式似乎不正确.实际上,%in%运算符可以使用多个值正常工作,但只有单个元素存在时才会运行.在我的原始场景中,过滤值是动态的,因此我希望有一个在两种情况下都有效的函数.
my_db <- src_mysql(dbname = "dplyr",
host = "dplyr.csrrinzqubik.us-east-1.rds.amazonaws.com",
port = 3306,
user = "dplyr",
password = "dplyr")
tbl(my_db, "dplyr") %>% filter(carrier %in% c("UA","AA")) #works
tbl(my_db, "dplyr") %>% filter(carrier %in% c("UA")) #doesn't work
Run Code Online (Sandbox Code Playgroud)
我的问题是多个selectInput值的重复创建意外的dplyr(postgres)行为.似乎这个问题也是众所周知的
将一些建议放在一起,适合我的场景的最佳方法可能是下面的方法。filter()我不喜欢将 嵌套在语句中的原因if是我有多个filter闪亮应用程序的菜单项。因此,在源头操作变量可以节省我大量的打字时间。
a <- c("UA")
b <- if(length(a)>1) a else c(a,"")
tbl(my_db, "dplyr") %>%
filter(carrier %in% b)
Run Code Online (Sandbox Code Playgroud)
或者
a <- c("UA")
varToFilterFor <- rep(a ,2)
tbl(my_db, "dplyr") %>%
filter(carrier %in% varToFilterFor)
Run Code Online (Sandbox Code Playgroud)