Подтвердить что ты не робот

Передача строк в качестве аргументов в глаголах 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?

4b9b3361

Ответ 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)