Как исправить ошибку 'Quosures можно заключать в кавычки только в кавычках' в функции R - PullRequest
1 голос
/ 28 марта 2019

Я пытаюсь написать свою первую функцию, используя rlang, и у меня возникают проблемы с исправлением следующей ошибки.

Я прочитал виньетка , но не увиделхороший пример того, что я пытаюсь сделать.

library(babynames)
library(tidyverse)

name_graph <- function(data, name, sex){
name <- enquo(name)
sex <- enquo(sex)

data %>%
  filter_(name == !!name, sex == !!sex) %>%
  select(year, prop) %>%
  ggplot()+
  geom_line(mapping = aes(year, prop))
}

name_graph(babynames, Robert, M)

Я ожидаю свой график распределения, но получаю ошибку:

Вызывается из: abort (paste_line («Кавычки не могут быть заключены в кавычки только в контексте квази-цитаты.», «», «# Bad:», «list (!! myquosure)», «», «# Good:», «dplyr :: mutate (data, !!myquosure) "))

Ответы [ 2 ]

4 голосов
/ 28 марта 2019

Мы можем изменить функцию, преобразовав выражения (enquo) в строку в filter

library(rlang)
library(dplyr)
library(ggplot2)
name_graph <- function(data, name, sex){
   name <- enquo(name)
   sex <- enquo(sex)

    data %>%
      filter(name == !! as_label(name), sex == !! as_label(sex)) %>%
      select(year, prop) %>%
      ggplot()+
              geom_line(mapping = aes(year, prop))
    }

name_graph(babynames, Robert, M)

enter image description here

3 голосов
/ 28 марта 2019

функция filter_ устарела, и вам следует избегать ее использования.Также dplyr::filter не работает, если имя переменной совпадает с вводом.

Попробуйте это:

name_graph <- function(data, myname, mysex){

data %>%
  filter(name == myname, sex == mysex) %>%
  select(year, prop) %>%
  ggplot()+
  geom_line(mapping = aes(year, prop))
}

Кроме того, как упоминалось в комментариях, кавычки используются, есливы пытаетесь передать имена столбцов в качестве входных аргументов.В вашем случае вы передаете символьные строки в качестве входных данных, поэтому вам не нужны выражения, и лучше не использовать их в вашем случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...