2016-02-11 54 views
0

簡單的數據幀:dplyr過濾器選擇正確的行,但filter_不

df=data.frame(rpm=c(3000,4000,5000)) 

dplyrfilter命令正常工作:

> filter(df, rpm == 3000) 
    rpm 
1 3000 

不過,我想用filter_版本,因爲我被告知它在功能上更安全。如果不是這樣,我會堅持subset。這裏發生了什麼:

> filter_(df, "rpm" == 3000) 
[1] rpm 
<0 rows> (or 0-length row.names) 

絕對不行。發生了什麼?

+1

讀[這](https://cran.r-project.org/web/packages/dplyr/vignettes/nse.html) –

+4

'filter_(DF嘗試, 「rpm == 3000」)' –

+3

以SE形式引用參數通常最好用'〜'完成,就像'filter_(df,〜rpm == 3000)' – mtoto

回答

2

我們可以interp

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

這是我應該在函數內部使用'dplyr'的方式嗎?這比簡單的'df [df $ rpm == 3000,]'更加複雜和不可讀。如果這是'dplyr'在我的程序中應該帶來的假設簡化,我肯定會拋棄它來支持'R'。 – DeltaIV