Co oznacza pierwsza tylda w purrr:: Mapa
Patrzyłem na ten przykład , który używa map
. Tutaj jest:
mtcars %>%
split(.$cyl) %>% # from base R
map(~ lm(mpg ~ wt, data = .))
Jakie jest znaczenie pierwszej tyldy w map(~ lm...
? Czyli jak R interpretuje pierwszą tyldę? (rozumiem, że druga tylda oznacza funkcję...). Innym sposobem pytania jest, dlaczego poniższe nie działa?
mtcars %>%
split(.$cyl) %>% # from base R
map(lm(mpg ~ wt, data = .))
1 answers
Zgodnie z dokumentacją pomocy mapy , map
wymaga funkcji, ale akceptuje również formułę, wektor znaków, wektor liczbowy lub listę, z których te ostatnie są konwertowane do funkcji.
Operator ~
W R tworzy wzór. Więc ~ lm(mpg ~ wt, data = .)
jest wzorem. Wzory są przydatne w R, ponieważ uniemożliwiają natychmiastową ocenę symboli. Na przykład można zdefiniować
x <- ~f(a+b)
BEZ f
, a
lub b
być definiowane gdziekolwiek. W tym przypadku {[4] } jest w zasadzie skrót dla function(x) {lm(mpg ~ wt, data = x)}
Ponieważ {[2] } może zmienić wartość .
we wzorze w razie potrzeby.
Bez tyldy, lm(mpg ~ wt, data = .)
jest tylko wyrażeniem lub wywołaniem w R, które jest natychmiast oceniane. .
nie byłoby zdefiniowane w czasie, który jest wywoływany i map
nie można przekształcić tego w funkcję.
Możesz przekształcić te formuły w funkcje poza map()
za pomocą funkcji purrr::as_mapper()
. Na przykład
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"
Możesz zobaczyć, jak .
staje się pierwszym parametrem, który został przekazany do tej funkcji.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-11-13 22:07:18