Понимание квазиквотации - PullRequest
1 голос
/ 10 апреля 2020

Не могли бы вы помочь мне понять, как работает Quasiquotation? Я использую карту и функцию подсчета, но она не работает должным образом.

Первая попытка

map(names(starwars),~starwars %>% count(.x))
Error: Column `.x` is unknown

Вторая попытка

map(names(starwars),~starwars %>% count(!!.x))
#not useful [[1]]
# A tibble: 1 x 2
  `"name"`     n
  <chr>    <int>
1 name        87

[[2]]
# A tibble: 1 x 2
  `"height"`     n
  <chr>      <int>
1 height        87

Третья попытка

map(names(starwars),~starwars %>% count(!!!.x))
# the same

Еще один пример (работа с функциями) Если я хочу создать функцию, которая принимает список и каждый из изменений элемент списка относительно предыдущего элемента в этом списке:

my_list <- list("a" =1 , "b" = 2, "c" = 3)

# this obviously is not working (list + number)
> my_list+1
Error in my_list + 1 : non-numeric argument to binary operator
# this is a bit strange
my_list %>% map(~+1)
#this works fine
my_list %>% map(+1)
# as this
my_list %>% map(~.x+1)

# moving on to add the previous element to the next element
imap(my_list, my_list[[.y +1]] := .x %>% +1)
Error in `:=`(my_list[[.y + 1]], .x %>% +1) : could not find function ":="

# wrong eval 1?
imap(my_list, my_list[[.y +1]] <- .x %>% +1)
Error in eval(lhs, parent, parent) : object '.x' not found

# wrong eval 2?
imap(my_list, my_list[[.y +1]] <- !!.x %>% +1)
Error in eval(lhs, parent, parent) : object '.x' not found

# wrong symbol 1?
imap(my_list, my_list[[.y +1]] = .x %>% +1)
Error: unexpected '=' in "imap(my_list, my_list[[.y +1]] ="
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...