Передача строк в качестве аргументов в глаголах dplyr
Я хотел бы иметь возможность определять аргументы для dplyr
глаголов
condition <- "dist > 50"
а затем используйте эти строки в dplyr
:
require(ggplot2)
ds <- cars
ds1 <- ds %>%
filter (eval(condition))
ds1
Но это вызывает ошибку
Error: filter condition does not evaluate to a logical vector.
Код должен оцениваться как:
ds1<- ds %>%
filter(dist > 50)
ds1
Результат:
DS1
speed dist
1 14 60
2 14 80
3 15 54
4 18 56
5 18 76
6 18 84
7 19 68
8 20 52
9 20 56
10 20 64
11 22 66
12 23 54
13 24 70
14 24 92
15 24 93
16 24 120
17 25 85
Вопрос:
Как передать строку в качестве аргумента в глаголе dplyr
?
Ответы
Ответ 1
Пока они работают над этим, обходным путем можно воспользоваться if
:
library(dplyr)
library(magrittr)
ds <- data.frame(attend = c(1:5,NA,7:9,NA,NA,12))
filter_na <- FALSE
filtertest <- function(x,filterTF = filter_na){
if(filterTF) x else !(x)
}
ds %>%
filter(attend %>% is.na %>% filtertest)
attend
1 1
2 2
3 3
4 4
5 5
6 7
7 8
8 9
9 12
filter_na <- TRUE
ds %>%
filter(attend %>% is.na %>% filtertest)
attend
1 NA
2 NA
3 NA
Ответ 2
В следующей версии dplyr он, вероятно, будет работать следующим образом:
condition <- quote(dist > 50)
mtcars %>%
filter_(condition)