У меня проблемы с запуском нестандартных выражений оценки с пакетом 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 sintax
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
с тидиверсом, и где именно их использовать.
Я могу в основном бросить практически все, чтобы выбрать / суммировать, что это будет работать, но при использовании мутации вещи реагируют по-разному.
Например:
# 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 или стиль выбора nse
в других пакетах tidyverse, таких как tidyr?