2014-10-29 66 views
0

這工作(這麼好的閃亮):filter_與字符串參數

filter_(mtcars, "mpg > 24") 

這:

filter_(mtcars, "mpg > 24", "disp > 75") 

有沒有一種方法,使這項工作呢?

filter_(mtcars, "mpg > 24, disp > 75") 

這可以作爲一種替代

filter_(mtcars, "mpg > 24 & disp > 75") 

編輯1

這工作,但有沒有更好的辦法?如預期

filter_(mtcars,unlist(strsplit("mpg > 24, disp > 75", ","))) 

EDIT 2

之前的修改可能無法正常工作。它等效於以下內容:

filter_(mtcars,c("mpg > 24", "disp > 75")) 

當第二個條件可以忽略

mpg cyl disp hp drat wt qsec vs am gear carb 
    1 24.4 4 146.7 62 3.69 3.19 20.0 1 0 4 2 
    2 32.4 4 78.7 66 4.08 2.20 19.5 1 1 4 1 
    3 30.4 4 75.7 52 4.93 1.61 18.5 1 1 4 2 
    4 33.9 4 71.1 65 4.22 1.83 19.9 1 1 4 1 
    5 27.3 4 79.0 66 4.08 1.94 18.9 1 1 4 1 
    6 26.0 4 120.3 91 4.43 2.14 16.7 0 1 5 2 
    7 30.4 4 95.1 113 3.77 1.51 16.9 1 1 5 2 
+3

替代('&')是更好的方式恕我直言。更一般的,你也可以使用其他操作符,比如'|'。 – flodel 2014-10-29 18:33:03

+3

'filter_(mtcars,c(「mpg> 24」,「disp> 75」))''?你面臨的問題究竟是什麼? – MrFlick 2014-10-29 18:33:06

+0

您可能是對的@flodel,但我想要的選項是輸入是'標準'dplyr符號 – Vincent 2014-10-29 18:39:41

回答

0

所以在這裏我的假設是,你從一個textInput得到過濾參數,以便他們來通過爲文本。這是一個可行的辦法:所以

library(dplyr) 
Args<-c("mpg>24, disp>75") 
eval(parse(text=paste("filter(mtcars,",Args,")") )) 

    mpg cyl disp hp drat wt qsec vs am gear carb 
1 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 
2 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 
3 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2 
4 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1 
5 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2 
6 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2 

在這種情況下Args從用戶輸入。我使用粘貼將完整的filter函數作爲文本字符串。最後,eval(parse (..))位只是將字符串評估爲正常函數。請注意,這裏使用的filter代替filter_

這個答案是基於接受這個問題的答案:

Use character string as function argument

+0

感謝您的輸入約翰。我以前曾用'子集'這個方法。工作正常,但我試圖削減我的攝入量的評估。當在服務器上運行時,我認爲hadley或flodel的方法的安全風險相比較低 – Vincent 2014-10-30 15:19:24