这很有效(Shiny非常好):
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", ",")))
编辑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
答案 0 :(得分: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
是用户的输入。我使用paste将完整的filter
函数组合为一个文本字符串。最后,eval(parse (..))
位只是将字符串计算为正常函数。请注意,这使用filter
代替filter_
这个答案是基于对这个问题的接受答案:
答案 1 :(得分:0)
为了完整起见,我将放弃使用gsub
用字符串中的“&”替换逗号的(也许是微不足道的)解决方案:
filter_(mtcars, gsub(',', '&', "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.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
如果您将条件作为裸表达式输入到filter
中,则会生成与期望的输出相同的输出;如果没有逗号或用户选择使用&
,则效果很好不会引入涉及在任意表达式上使用eval
的潜在风险。