r - 具有公式的函数的正确 dplyr 函数式编程语法是什么
问题描述
我正在尝试使用 dplyr 函数式编程指南编写一个函数来动态更改变量名。它适用于大多数 tidyverse 变量替换,但不适用于要评估的函数使用公式时。
一个绘图示例facet_wrap
:
library(dplyr)
library(ggplot2)
mtcars %>%
ggplot(aes(hp, mpg)) +
geom_point() +
facet_wrap(~cyl)
f <- function(wrap_col) {
mtcars %>%
ggplot(aes(hp, mpg)) +
geom_point() +
facet_wrap(~ {{ wrap_col }})
}
f(cyl)
# Error in eval_tidy(facet, mask) : object 'cyl' not found
我尝试了上面的简单版本并使用引号"{{ wrap_col }}"
和方括号。没有一个对我有用
解决方案
我们可以使用rlang::inject
library(dplyr)
f <- function(wrap_col) {
mtcars %>%
ggplot(aes(hp, mpg)) +
geom_point() +
facet_wrap(rlang::inject(~ {{ wrap_col }}))
}
-测试
p1 <- mtcars %>%
ggplot(aes(hp, mpg)) +
geom_point() +
facet_wrap(~cyl)
p2 <- f(cyl)
all.equal(p1, p2)
#[1] TRUE
推荐阅读
- javascript - xampp 上 wordpress 中 js/jQuery 的一些问题
- objective-c - 存储自定义对象(Swift 中的类)以供 Objective-C 方法访问
- bash - 我可以tail -fa log 并且只打印与某些文本匹配的某些行吗?
- java - 在从字符串转换之后,在 Java 中对 json 子数组进行粒度索引
- c - C中的空指针转换
- vue.js - 扩展和重新分配 vuetify 组件
- java - 试图获得我的 int 输入的总和一段时间循环
- php - 没有收到来自 PHP 联系表的任何电子邮件
- android - layout() 需要延迟更改才能进行视觉更改
- java - 如何将星星移动到它所属的位置