r - 如何修复 R 函数中的 'Quosures can only be unquoted within a quasiquotation context' 错误

标签 r tidyverse rlang

我正在尝试使用 rlang 编写我的第一个函数,但在修复以下错误时遇到了一些麻烦。

我已经阅读了 vignette ,但没有看到我正在尝试做的事情的好例子。

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)

我期待我的分布图,但出现错误:

Called from: abort(paste_line("Quosures can only be unquoted within a quasiquotation context.", "", " # Bad:", " list(!!myquosure)", "", " # Good:", " dplyr::mutate(data, !!myquosure)"))

最佳答案

我们可以通过将 enquo 中的 quosures ( 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

关于r - 如何修复 R 函数中的 'Quosures can only be unquoted within a quasiquotation context' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55406546/

相关文章:

r - 用于编写函数的rlang运算符的解释

r - 如何在 R 中按月和年组合多个数据框

R 在另一列中找到的聚合列的总和

r - magrittr 管道内的 enquo()

r - 使用 dplyr/tidyverse 进行类似扫描的操作

r - 如何在R中按顺序重新编号组ID?

R:我可以让函数的执行环境永久化吗?

r - ggplot2:在图形面板集上覆盖控制组线

r - 根据 Levenshtein 距离为 R 中的相似行分配唯一索引

r - 如何仅折叠 R 中的一些重复列