# 「R」curly curly，更好的非标准计算

`rlang v0.4.0`引入了新的非标准计算操作符 `{{`。这大大方便了`dplyr`重编程。

```library(dplyr)

starwars %>%
group_by(gender) %>%
summarise(mass_maximum = max(mass, na.rm = TRUE))
#> # A tibble: 5 x 2
#>   gender        mass_maximum
#>   <chr>                <dbl>
#> 1 <NA>                    75
#> 2 female                  75
#> 3 hermaphrodite         1358
#> 4 male                   159
#> 5 none                   140```

```max_by <- function(data, var, by) {
data %>%
group_by({{ by }}) %>%
summarise(maximum = max({{ var }}, na.rm = TRUE))
}

starwars %>% max_by(height)
#> # A tibble: 1 x 1
#>   maximum
#>     <int>
#> 1     264

starwars %>% max_by(height, by = gender)
#> # A tibble: 5 x 2
#>   gender        maximum
#>   <chr>           <int>
#> 1 <NA>              167
#> 2 female            213
#> 3 hermaphrodite     175
#> 4 male              264
#> 5 none              200```

```var <- sample(c("woof", "meow", "mooh"), size = 1)
glue::glue("Did you just say {var}?")
#> Did you just say mooh?```

```  summarise_by <- function(data, ..., by) {
data %>%
group_by({{ by }}) %>%
summarise(...)
}

starwars %>%
summarise_by(
average = mean(height, na.rm = TRUE),
maximum = max(height, na.rm = TRUE),
by = gender
)
#> # A tibble: 5 x 3
#>   gender        average maximum
#>   <chr>           <dbl>   <int>
#> 1 <NA>             120      167
#> 2 female           165.     213
#> 3 hermaphrodite    175      175
#> 4 male             179.     264
#> 5 none             200      200```

• 如果有字符串输入，使用 `.data` 代词：
```  max_by <- function(data, var, by) {
data %>%
group_by(.data[[by]]) %>%
summarise(maximum = max(.data[[var]], na.rm = TRUE))
}

starwars %>% max_by("height", by = "gender")
#> # A tibble: 5 x 2
#>   gender        maximum
#>   <chr>           <int>
#> 1 <NA>              167
#> 2 female            213
#> 3 hermaphrodite     175
#> 4 male              264
#> 5 none              200```

### 参考资料

[1]

new programming vignette in ggplot2: https://ggplot2.tidyverse.org/dev/articles/ggplot2-in-packages.html#using-aes-and-vars-in-a-package-function

0 条评论

• ### FancyHeatmap，支持输出嵌入网站了！

FancyHeatmap，是我给TBtools中“卡通式热图”命的名字。前述，在公众号上，我已经推出了这个功能相关的新手教程。在后续，我也发现有不少人已经应用：

• ### 「R」UCSCXenaShiny：基于 R 的 Xena 数据库交互应用

项目地址：https://github.com/openbiox/UCSCXenaShiny[1]

• ### 「R」Windows R 安装包显示无法锁定目录怎么搞？

参考：https://stackoverflow.com/questions/14382209/r-install-packages-returns-faile...

• ### 100张经典信息可视化图表，让你脑洞大开

01-Redefining the Dome by National Geographic

• ### 100张经典信息可视化图表，让你脑洞大开

本文作者：JoAnn ? 18世纪50年代霍乱时期， John Snow绘制的一张霍乱疫情的位置图， 并通过该图表找到了霍乱疫情源头所在。 那时起，信息设计便已...

• ### 「首席架构师推荐」最棒的的Flutter库，工具，教程，文章列表

Flutter是一款移动应用SDK，可通过单一代码库为iOS和Android构建高性能，高保真的应用。

• ### Hive : SORT BY vs ORDER BY vs DISTRIBUTE BY vs CLUSTER BY

在Apache Hive中，像SQL一样，您可以根据全局排序和分布要求决定对数据进行全局排序或局部排序。在这篇文章中，我们将了解Hive中的SORT BY，OR...