Быстрый ответ на ваш вопрос: при вызове карты никогда не нужно использовать обозначение тильды.Существуют разные способы вызова карты, и нотация тильды является одним из них.Вы уже описали простой способ вызова карты, когда функция принимает / нуждается только в одном аргументе.
df %>% map_dbl(mean)
Однако, когда функции становятся более сложными, есть два основных способа их вызова - либо с нотацией тильды, либос обычной анонимной функцией.
# normal anonymous function
models <- mtcars %>%
split(.$cyl) %>%
map(function(x) lm(mpg ~ wt, data = x))
# anonymous mapper function (~)
models <- mtcars %>%
split(.$cyl) %>%
map(~ lm(mpg ~ wt, data = .))
Нотация тильды в основном превращает формулу в функцию, которую в большинстве случаев легче читать.Каждая опция может быть превращена в именованную функцию, которая работает следующим образом.В идеале именованная функция уменьшает сложность базовой функции до одного аргумента (тот, который должен быть зациклен), и в этом случае функцию можно вызывать, как и все простые функции в карте, без дополнительных аргументов / обозначений.
# normal named function notation
lm_mpg_wt <- function(x) {
lm(mpg ~ wt, data = x)
}
models <- mtcars %>%
split(.$cyl) %>%
map(lm_mpg_wt)
# named mapper function
mapper_lm_mpg_wt <- as_mapper(~ lm(mpg ~ wt, data = .))
models <- mtcars %>%
split(.$cyl) %>%
map(mapper_lm_mpg_wt)
В основном это ваши варианты.Вы должны выбрать то, что является самым простым и наиболее подходящим для вашей проблемы.Именованные функции лучше, если они вам понадобятся снова.Многие думают, что функции картостроителя легче читать, но в конце концов это выбор личных предпочтений.