~
是在tidyverse
. ~length(unique(.x))
将产生与 相同的结果function(.x) {length(unique(.x))}
。
这种编写函数的方式最有可能与purrr
library 一起使用,实际上,purrr::as_mapper()
它可以识别这种语法并返回一个可以像R
.
例如:函数f
会告诉我有多少唯一值.x
。.x
也可以称为 .
或..1
。如果您有两个参数,则.x
和.y
。最后有 n 个参数..1
, ..2
, ..3
......n
require(purrr)
#> Loading required package: purrr
f <- as_mapper(~length(unique(.x)))
f2 <- as_mapper(~length(unique(.)))
f3 <- as_mapper(~length(unique(..1)))
f(mtcars$mpg)
#> [1] 25
f2(mtcars$mpg)
#> [1] 25
f3(mtcars$mpg)
#> [1] 25
由reprex 包于 2021-07-05 创建 (v2.0.0 )
另一个例子:
library(dplyr)
library(purrr)
#in all starwars columns that are character vectors, how many unique values are they?
starwars |>
summarize(across(where(is.character), ~ length(unique(.x))))
#> # A tibble: 1 x 8
#> name hair_color skin_color eye_color sex gender homeworld species
#> <int> <int> <int> <int> <int> <int> <int> <int>
#> 1 87 13 31 15 5 3 49 38
f <- as_mapper(~ if (is.character(.x)) length(unique(.x)) else NULL)
f_base <- function(.x) {if (is.character(.x)) length(unique(.x)) else NULL}
starwars %>%
map_dfc(f)
#> # A tibble: 1 x 8
#> name hair_color skin_color eye_color sex gender homeworld species
#> <int> <int> <int> <int> <int> <int> <int> <int>
#> 1 87 13 31 15 5 3 49 38
starwars %>%
map_dfc(f_base)
#> # A tibble: 1 x 8
#> name hair_color skin_color eye_color sex gender homeworld species
#> <int> <int> <int> <int> <int> <int> <int> <int>
#> 1 87 13 31 15 5 3 49 38
由reprex 包于 2021-07-05 创建 (v2.0.0 )