具有两个输入的dplyr或[]滤波器

具有两个输入的dplyr或[]滤波器,r,dplyr,shiny,R,Dplyr,Shiny,我正在开发一个闪亮的应用程序,我需要用一个值过滤一个tibble。我有3种不同的selectInput(),允许用户选择一列(输入$col)和两个值(输入$value1和输入$value2)。例如,我有一个数据框,列sex=c(M,W,M,M,M,W,M)input$col将是sex,input$value1将是M或W 现在,如果我使用dplyr::filter()它不起作用,但是如果我使用[]它起作用。过滤器怎么了?这是我的密码 #doesn't work data() %>% dply

我正在开发一个闪亮的应用程序,我需要用一个值过滤一个
tibble
。我有3种不同的
selectInput()
,允许用户选择一列(输入$col)和两个值(输入$value1和输入$value2)。例如,我有一个数据框,列
sex=c(M,W,M,M,M,W,M)
input$col将是
sex
,input$value1将是
M
W

现在,如果我使用
dplyr::filter()
它不起作用,但是如果我使用
[]
它起作用。过滤器怎么了?这是我的密码

#doesn't work
data() %>% dplyr::filter(input$col %in% input$value1 | input$col %in% input$value2)

#it works
data()[data()[[input$col]] %in% c(input$value1, input$value2),]

在dplyr版本中,我也尝试了
=
而不是%中的
%,但没有改变任何东西。我想知道这是我的错误还是无法使用filter()

这是对dplyr的非标准评估,您需要使用bang-bang来引用unquote。i、 e.
data()%%>%dplyr::filter(!!在%input$value1中输入$col%|!!在%input$value2中输入$col%。
)。请参阅说明:@csgroen完全正确,但是首选方式有点改变,现在建议使用
.data[[input$col]]]
,请参阅例如:谢谢大家!我从没听说过那次爆炸。我尝试了两种解决方案,第一种不起作用,而@starja解决方案起作用。所以我现在的问题是:我的解决方案(使用R base)和
dplyr
解决方案之间有什么区别吗?我的意思是在可靠性方面。不,两者都很好,只要选择你更喜欢的编码风格就行了