Функциональная проблема. Тидевальская фильтрация - PullRequest
0 голосов
/ 17 ноября 2018

Что здесь не так? Это работает:

iris %>% 
  filter(Species == "setosa") %>% 
  summarise(msl = mean(Sepal.Length), msw = mean(Petal.Width))

и производит:

    msl   msw
1 5.006 0.246

Но эта функция не работает:

means <- function(data, value){
  data <- enquo(data)
  value <- enquo(value)
  data %>% 
    filter(Species == !!value) %>% 
    summarise(msl = mean(Sepal.Length), msw = mean(Petal.Width))
}

и means(iris, "setosa") выдают эту ошибку:

Ошибка в UseMethod ("filter_"): нет применимого метода для 'filter_', примененного к объекту класса "c ('quosure', 'формула')" Вызывается из: фильтра _ (. Data, .dots = compat_as_lazy_dots (...))

1 Ответ

0 голосов
/ 17 ноября 2018

Сообщение об ошибке довольно простое, вы не можете отфильтровать запрос. Я не знаю, почему вы вводите свои данные, но это даст вам то, что вы хотите:

means <- function(data, value){

  value <- enquo(value)
  data %>% 
    filter(Species == !!value) %>% 
    summarise(msl = mean(Sepal.Length), msw = mean(Petal.Width))

}
...