Что такое тильда в этом контексте R? - PullRequest
1 голос
/ 24 апреля 2020
  mtcars %>%
  group_by(cyl) %>%
  group_map(~ head(.x, 2L)) 

Кто-нибудь может объяснить последнюю часть кода? Я знаю про трубу, но что такое ~ head(.x, 2L)?

1 Ответ

3 голосов
/ 24 апреля 2020

Это сокращение для анонимной функции, которая применяется к каждой группе. .x автоматически вводится в анонимных функциях стиля purrr (и дополнительно .y для функций map2).

Но вы также можете использовать традиционные анонимные функции:

mtcars %>%
  group_by(cyl) %>%
  group_map(., function(x) head(x, 2L)) # the `.` is just for illustration and can be omitted with the %>% 

Или вы можете написать именованную функцию и использовать ее в group_map():

new_fun <- function(x) {
   head(x, 2L)
}
mtcars %>%
  group_by(cyl) %>%
  group_map(new_fun)

Показанная вами функция (head(.x, 2L)) применяется один раз для каждой группы данных. Вы можете проверить, сколько у вас групп:

mtcars %>%
  group_by(cyl) %>%
  n_groups()
#> [1] 3

Для каждой из этих групп напечатаны первые две строки данных:

mtcars %>%
  group_by(cyl) %>%
  group_map(~ head(.x, 2L)) 
#> [[1]]
#> # A tibble: 2 x 10
#>     mpg  disp    hp  drat    wt  qsec    vs    am  gear  carb
#>   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1  22.8  108     93  3.85  2.32  18.6     1     1     4     1
#> 2  24.4  147.    62  3.69  3.19  20       1     0     4     2
#> 
#> [[2]]
#> # A tibble: 2 x 10
#>     mpg  disp    hp  drat    wt  qsec    vs    am  gear  carb
#>   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1    21   160   110   3.9  2.62  16.5     0     1     4     4
#> 2    21   160   110   3.9  2.88  17.0     0     1     4     4
#> 
#> [[3]]
#> # A tibble: 2 x 10
#>     mpg  disp    hp  drat    wt  qsec    vs    am  gear  carb
#>   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1  18.7   360   175  3.15  3.44  17.0     0     0     3     2
#> 2  14.3   360   245  3.21  3.57  15.8     0     0     3     4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...