bur*_*ger 7 r tidyverse tidyeval rlang
一段时间以来,我一直试图了解 tidy eval 或如何在 tidyverse 中使用变量,但我似乎从未完全掌握它。
例如,我试图将 ggplot 与变量映射一起使用。这将是基本的 R 版本:
library(ggplot2)
var1 = "wt"
var2 = "mpg"
ggplot(mtcars, aes(x = get(var1), y = get(var2))) + geom_point()
Run Code Online (Sandbox Code Playgroud)
但是,根据我所看到的所有文档和讨论,“正确”的 quasiquotation 方式是:
ggplot(mtcars, aes(x = !!sym(var1), y = !!sym(var2))) + geom_point()
Run Code Online (Sandbox Code Playgroud)
也许这更类似于:
ggplot(mtcars, aes(x = !!as.symbol(var1), y = !!as.symbol(var2))) + geom_point()
Run Code Online (Sandbox Code Playgroud)
该get()方法对我来说更短且更具可读性。为什么 tidyverse 社区会回避它?
我对 tidyeval 不太熟悉,我对此可能是错的。我的理解是,整洁的评估对于稍微复杂的练习更有用,例如组合dplyror tidyrwith ggplot2,或处理多个参数(dot-dot-dot)。这里\xe2\x80\x99s 是一个函数,它接受由 传递的分组变量...,计算 的平均值,.summary_var然后绘制结果:
library(tidyverse)\ngg_dummy_func <- function(.data, .summary_var, ...) {\n\n summary_var <- enquo(.summary_var)\n group_vars <- enquos(...)\n\n sum_data <- .data %>%\n group_by(!!!group_vars) %>%\n summarise(mean=mean(!!summary_var))\n\n gg <- ggplot(sum_data, aes(x=!!sym(names(sum_data)[1]), \n y=!!sym(names(sum_data)[2]),\n color=mean)) +\n geom_point()\n print(gg)\n}\n\n\ngg_dummy_func(mtcars, mpg, wt, cyl)\nRun Code Online (Sandbox Code Playgroud)\n\n\n
| 归档时间: |
|
| 查看次数: |
396 次 |
| 最近记录: |