У меня возникли проблемы с запуском выражений нестандартной оценки (nse) с пакетом tidyr
.
По сути, я хочу развернуть два столбца, которые могут быть идентичными или нет, чтобы получить фрейм данных со всеми возможными комбинациями. Проблема в том, что это будет функция, поэтому я не буду знать заранее название столбца.
Вот минимальный пример:
library(tidyr)
dummy <- data.frame(x = c("ex1", "ex2"), y = c('cat1', 'cat2')) # dataset
tidyr::expand(dummy, x, y) # using standard evaluation works
tidyr::expand_(dummy, c("x", "y")) # using the deprecated syntax works
# The following did not work:
tidyr::expand(dummy, one_of('x'), y) # using select syntax
tidyr::expand(dummy, vars('x', 'y')) # mutate_at style
tidyr::expand(dummy, .data[[cnae_agg]], .data[[cnae_agg]]) # mutate current style
tidyr::expand(dummy, sym('x'), sym('y')) # trying to convert to symbols
tidyr::expand(dummy, !!!enquos('x', 'y'))
tidyr::expand(dummy, !!('x'), y) # unquosure just one element
tidyr::expand(dummy, !!!c("x", "y")) # unquosure vector of strings
tidyr::expand(dummy, !!!c(quo("x"), quo("y"))) # unquosure vector that is being quosured before
Итак, у меня два вопроса:
1) Какой правильный синтаксис следует применять с функцией расширения tidyr?
2) Я, наверное, уже несколько раз читал главу о квазиквотации Advanced R, но это мне до сих пор не ясно, почему существует несколько разных «стилей» для использования nse
с tidyverse и где именно использовать каждый.
Я могу в основном бросить что угодно, чтобы выбрать / резюмировать, что это будет работать, но при использовании mutate все реагирует по-разному.
Например:
# mutate
mutate(dummy, new_var = .data[['x']]) # mutate basic style
mutate(dummy, new_var = !!'x') # this just attributes 'x' to all rows
# mutate at
mutate_at(dummy, .vars=vars('y'), list(~'a')) # this works
mutate_at(dummy, .vars=vars(!!'y'), list(~'a')) # this also works
mutate_at(dummy, .vars=vars('y'), list(~`<-`(.,!!'x'))) # if we try to use unquote to create an attribution it does not work
mutate_at(dummy, .vars=vars('y'), list(~`<-`(.,vars(!!'x')))) # even using vars, which works for variable selection, doesnt suffice
# select
select(dummy, x) # this works
select(dummy, 'x') # this works
select_at(dummy, vars(!!'x')) # this works
select_at(dummy, 'x') # this works
select_at(dummy, !!'x') # this doesnt work
Это подводит меня к моему 2) вопросу.
Есть ли обновленное руководство со всеми текущими синтаксисами для стиля tidyverse с упором на различия в использовании каждого «глагола», например, в «mutate» и «select» (т.е. когда один работает, а другой нет? )?
И как узнать, нужно ли использовать стиль mutate или select nse
в других пакетах tidyverse, например tidyr?
rename
илиrename_at
- person akrun   schedule 23.09.2019