.x
и .y
не являются глобальными параметрами, которые могут использоваться где угодно, они зарезервированы для определенных c функций. (обычно map
)
С ?map
.f Функция, формула или вектор (не обязательно atomi c).
Если формула, например ~ .x + 2, она преобразуется в функцию. Существует три способа обращения к аргументам:
- Для функции с одним аргументом используйте.
- Для функции с двумя аргументами используйте .x и .y
- Для большего количества аргументов используйте ..1, ..2, ..3 и т.д. c
Давайте рассмотрим простой список
library(purrr)
listvec1 <- list(a = 1:3, b = 4:6, c = 2:4)
1) Давайте скажем, мы хотим умножить каждый элемент в списке на 2, map
имеет единственный аргумент, поэтому мы используем .
здесь.
map(listvec1, ~. * 2)
#$a
#[1] 2 4 6
#$b
#[1] 8 10 12
#$c
#[1] 4 6 8
По совпадению .x
также работает здесь:
map(listvec1, ~.x * 2)
, но если вы используете .y
, это выдаст ошибку, потому что в map
нет 2 аргументов.
map(listvec, ~.y * 2)
Ошибка в .f (.x [[i]], ...): список ... содержит менее 2 элементов
2 ) Давайте возьмем другой список и теперь добавим listvec1
с listvec2
. Для этого мы можем использовать map2
, который имеет два аргумента, поэтому здесь мы называем их .x
и .y
.
listvec2 <- list(a = 7, b = 8, c = 9)
map2(listvec1,listvec2, ~.x + .y)
#you could actually simplify this as but anyway this is just an example
#map2(listvec1,listvec2, `+`)
#$a
#[1] 8 9 10
#$b
#[1] 12 13 14
#$c
#[1] 11 12 13
В том же самом мы используем .x
и .y
в imap
, где .x
- элемент, а .y
- либо имя списка (если имеется), либо индекс.
В посте выше .y
ничего не значит, поэтому использование его как
data_list %>% excel_export("foo.xlsx", table_names = .y)
определенно приведет к ошибке. Для использования .x
, .y
необходимо использовать указанные c функции, как описано выше. Так что если вы хотите использовать каналы для своей команды, вы должны использовать
data_list %>% excel_export("foo.xlsx", table_names = tab_name)