Skip to content

manip_apply_syms ignores renamed vars when several funs are provided #4180

Description

@moodymudskipper

See reprex below.

library(tidyverse)
  
# renaming DISP on the fly does change the name of the output
mtcars %>%
  group_by(cyl) %>% summarize_at(vars(DISP = disp),median)
#> # A tibble: 3 x 2
#>     cyl  DISP
#>   <dbl> <dbl>
#> 1     4  108 
#> 2     6  168.
#> 3     8  350.

# but doesn't if several functions (see lower case "disp_mean" and "disp_median")
mtcars %>%
  group_by(cyl) %>% summarize_at(vars(DISP = disp),funs(mean,median))
#> # A tibble: 3 x 3
#>     cyl disp_mean disp_median
#>   <dbl>     <dbl>       <dbl>
#> 1     4      105.        108 
#> 2     6      183.        168.
#> 3     8      353.        350.

# replace the following part at the bottom of dplyr:::manip_apply_syms
# syms_names <- map_chr(syms, as_string)
# grid <- expand.grid(var = syms_names, call = names(funs))
# names(out) <- paste(grid$var, grid$call, sep = "_")
manip_apply_syms <- dplyr:::manip_apply_syms
body(manip_apply_syms)[[9]][[4]][[4]] <- quote({
  grid <- expand.grid(var = names(syms), call = names(funs))
  names(out) <- paste(grid$var, grid$call, sep = "_")
})
assignInNamespace(
  "manip_apply_syms", manip_apply_syms,
  ns = "dplyr", pos = "package:dplyr")
      
# still good
mtcars %>%
  group_by(cyl) %>% summarize_at(vars(DISP = disp),median)
#> # A tibble: 3 x 2
#>     cyl  DISP
#>   <dbl> <dbl>
#> 1     4  108 
#> 2     6  168.
#> 3     8  350.

# now good as well
mtcars %>%
  group_by(cyl) %>% summarize_at(vars(DISP = disp),funs(mean,median))
#> # A tibble: 3 x 3
#>     cyl DISP_mean DISP_median
#>   <dbl>     <dbl>       <dbl>
#> 1     4      105.        108 
#> 2     6      183.        168.
#> 3     8      353.        350.

Created on 2019-02-13 by the reprex package (v0.2.0).

The latter behavior makes more sense to me.

Metadata

Metadata

Labels

bugan unexpected problem or unintended behavior

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions