Согласно справочной документации по карте, map
нужна функция, но он также принимает формулу, символ вектор, числовой вектор или список, последние из которых преобразуются в функции.
Оператор ~
в R создает формулу. Итак, ~ lm(mpg ~ wt, data = .)
- это формула. Формулы полезны в R, потому что они препятствуют немедленному вычислению символов. Например, вы можете определить
x <- ~f(a+b)
без определения f
, a
или b
. В этом случае ~ lm(mpg ~ wt, data = .)
- это, по сути, ярлык для function(x) {lm(mpg ~ wt, data = x)}
, потому что map
может изменять значение .
в формуле по мере необходимости.
Без тильды lm(mpg ~ wt, data = .)
- это просто выражение или вызов в R, который вычисляется немедленно. .
не будет определен во время вызова, и map
не может преобразовать его в функцию.
Вы можете превратить эти формулы в функции за пределами map()
с помощью purrr::as_mapper()
. Например
myfun <- as_mapper(~lm(mpg ~ wt, data = .))
myfun(mtcars)
# Call:
# lm(formula = mpg ~ wt, data = .)
#
# Coefficients:
# (Intercept) wt
# 37.285 -5.344
myfun
# <lambda>
# function (..., .x = ..1, .y = ..2, . = ..1)
# lm(mpg ~ wt, data = .)
# attr(,"class")
# [1] "rlang_lambda_function"
Вы можете видеть, как .
становится первым параметром, передаваемым этой функции.
person
MrFlick
schedule
29.06.2017
help("~")
. - person Spacedman   schedule 29.06.2017~
. То есть указать формулу. Тогдаmap
принимает только формулы? - person CPak   schedule 29.06.2017