2014-10-29 67 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