Использование dplyr в функции вызывает ошибку, несмотря на enquo () - PullRequest
0 голосов
/ 31 января 2019

Я пытался перевести работающий 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)
...