Я пытался перевести работающий dplyr-код в функцию, но потерпел неудачу из-за enquo()
/ !!
.
Функция предназначена для набора данных с 160 переменными и применяется несколько раз при измененииКоличество переменных (иногда более 3, как в представлении, иногда более 12, в зависимости от темы), группирующая переменная («ABTEIL») остается всегда одинаковой.Я прочитал и попробовал много вещей о NSE (из SO, виньетка с dplyr.tidyverse.com и т. Д.), А также посмотрел многие другие SO сообщения.Я не могу точно определить проблему.
# Reprex
library(tidyverse)
# sample dataframe
ABTEIL <- c(rep(1:3, 4))
C1 <- c(sample(rep(0:1, 6)))
C2 <- c(sample(rep(1:0, 6)))
C3 <- c(sample(rep(1:0, 6)))
C4 <- c(sample(rep(1:0, 6)))
test_df <- tibble(ABTEIL, C1, C2, C3, C4)
# set of variables
test_vars <- c("C1", "C2", "C3")
# code with desired result
test_df %>%
group_by(ABTEIL) %>%
summarise_at(.vars = test_vars,
.funs = sum) %>%
column_to_rownames("ABTEIL") %>%
rownames_to_column() %>%
gather(Nr., value, -rowname) %>%
spread(rowname, value)
#> Nr. 1 2 3
#> 1 C1 1 2 3
#> 2 C2 2 3 1
#> 3 C3 2 2 2
# trying and putting it in a function
unit.wise.func <- function(df, vars){
vars <- enquo(vars)
df %>%
group_by(ABTEIL) %>%
summarise_at(.vars = !! vars,
.funs = sum) %>%
column_to_rownames("ABTEIL") %>%
rownames_to_column() %>%
gather(Nr., value, -rowname) %>%
spread(rowname, value)
}
unit.wise.func(df = test_df, vars = test_vars)
#> Error in is_quosure(e2): argument "e2" is missing, with no default
# sessioninfo
R version 3.5.2 (2018-12-20)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS Mojave 10.14.2
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] shiny_1.2.0 shurp2018_0.0.9000 kableExtra_1.0.1
naniar_0.4.1 forcats_0.3.0 stringr_1.3.1
[7] dplyr_0.8.0 purrr_0.3.0 readr_1.3.1
tidyr_0.8.2 tibble_2.0.99.9000 ggplot2_3.1.0
[13] tidyverse_1.2.1
Я ожидаю сводку по указанному подмножеству переменных в соответствии с функцией (здесь сумма), сгруппированной по фиксированной переменной «ABTEIL», как показано выше.Вместо этого я получаю сообщение об ошибке выше.
РЕДАКТИРОВАТЬ: не знаю, как пометить / ответить на это: ответ @aosmith решил проблему:
summarise_at(.vars = vars(vars),
.funs = sum)