dplyr筛选器选择正确的行,但筛选器不';T

dplyr筛选器选择正确的行,但筛选器不';T,r,dataframe,dplyr,R,Dataframe,Dplyr,简单数据框: df=data.frame(rpm=c(3000,4000,5000)) dplyrfilter命令工作正常: > filter(df, rpm == 3000) rpm 1 3000 但是,我想使用过滤器版本,因为我被告知它在函数中更安全。如果不是因为这个,我只会坚持使用子集。下面是发生的情况: > filter_(df, "rpm" == 3000) [1] rpm <0 rows> (or 0-length row.names) >过滤器(

简单数据框:

df=data.frame(rpm=c(3000,4000,5000))
dplyr
filter
命令工作正常:

> filter(df, rpm == 3000)
   rpm
1 3000
但是,我想使用
过滤器
版本,因为我被告知它在函数中更安全。如果不是因为这个,我只会坚持使用
子集
。下面是发生的情况:

> filter_(df, "rpm" == 3000)
[1] rpm
<0 rows> (or 0-length row.names)
>过滤器(df,“rpm”==3000)
[1] 转速
(或长度为0的行名称)

绝对不行。发生了什么事?

我们可以尝试使用
interp

library(layzeval)
df %>%
     filter_(interp(~ nm==3000, nm=as.name("rpm")))
#   rpm
#1 3000

阅读
filter(df,~rpm==3000”)
引用SE形式的参数通常最好使用
~
,如
filter(df,~rpm==3000)
Hmmm……这很复杂。@DeltaIV坚持使用
dplyr
magrittr
tidyr
,只有当你试图在它们的基础上构建可适应的函数时,复杂性才真正存在。问题被保留为重复-因此我不能添加作为答案。这是我应该在函数中使用
dplyr
的方式吗?这比简单的
df[df$rpm==3000,]
要复杂得多,也不可读。如果这是
dplyr
应该为我的程序带来的假定简化,那么我肯定会放弃它,转而支持base
R