Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

No longer able to use case_when() in rename_all() #4459

Closed
bschneidr opened this issue Jul 2, 2019 · 2 comments
Closed

No longer able to use case_when() in rename_all() #4459

bschneidr opened this issue Jul 2, 2019 · 2 comments

Comments

@bschneidr
Copy link
Contributor

I'm trying to use case_when() in a function used with rename_all(). In the simple example below, I have a renaming function applied to the mtcars dataset which should return "fuel_efficiency" for column names equal to "mpg" and otherwise return the original column name.

    mtcars <- tibble::as_tibble(mtcars)
    rename_all(mtcars,
               function(x) case_when(x == 'mpg' ~ 'fuel_efficiency',
                                     TRUE ~ x))

With the latest dplyr release (0.8.2) this code no longer works and throws an error which I can't yet decipher.

> Error: must have class `character`, not class `dplyr_sel_vars/character`

Below are the reprexes of this code used with dplyr 0.8.1 and dplyr 0.8.2.

From the news file and recent Github issues, I can't see why this would have stopped working. What's going on here?

Using dplyr 0.8.1

# Using dplyr 0.8.1 ----

  ## Install version of package corresponding to version 0.8.1
    devtools::install_github('tidyverse/dplyr', ref = 'f01e5e9')
#> Skipping install of 'dplyr' from a github remote, the SHA1 (f01e5e91) has not changed since last install.
#>   Use `force = TRUE` to force installation

  ## Run example
    library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
    mtcars <- tibble::as_tibble(mtcars)
    rename_all(mtcars,
               function(x) case_when(x == 'mpg' ~ 'fuel_efficiency',
                                     TRUE ~ x))
#> # A tibble: 32 x 11
#>    fuel_efficiency   cyl  disp    hp  drat    wt  qsec    vs    am  gear
#>              <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#>  1            21       6  160    110  3.9   2.62  16.5     0     1     4
#>  2            21       6  160    110  3.9   2.88  17.0     0     1     4
#>  3            22.8     4  108     93  3.85  2.32  18.6     1     1     4
#>  4            21.4     6  258    110  3.08  3.22  19.4     1     0     3
#>  5            18.7     8  360    175  3.15  3.44  17.0     0     0     3
#>  6            18.1     6  225    105  2.76  3.46  20.2     1     0     3
#>  7            14.3     8  360    245  3.21  3.57  15.8     0     0     3
#>  8            24.4     4  147.    62  3.69  3.19  20       1     0     4
#>  9            22.8     4  141.    95  3.92  3.15  22.9     1     0     4
#> 10            19.2     6  168.   123  3.92  3.44  18.3     1     0     4
#> # ... with 22 more rows, and 1 more variable: carb <dbl>

Created on 2019-07-02 by the reprex package (v0.3.0)

Session info
devtools::session_info()
#> - Session info ----------------------------------------------------------
#>  setting  value                       
#>  version  R version 3.6.0 (2019-04-26)
#>  os       Windows 10 x64              
#>  system   x86_64, mingw32             
#>  ui       RTerm                       
#>  language (EN)                        
#>  collate  English_United States.1252  
#>  ctype    English_United States.1252  
#>  tz       America/New_York            
#>  date     2019-07-02                  
#> 
#> - Packages --------------------------------------------------------------
#>  package     * version date       lib source                          
#>  assertthat    0.2.1   2019-03-21 [1] CRAN (R 3.6.0)                  
#>  backports     1.1.4   2019-04-10 [1] CRAN (R 3.6.0)                  
#>  callr         3.2.0   2019-03-15 [1] CRAN (R 3.6.0)                  
#>  cli           1.1.0   2019-03-19 [1] CRAN (R 3.6.0)                  
#>  crayon        1.3.4   2017-09-16 [1] CRAN (R 3.6.0)                  
#>  curl          3.3     2019-01-10 [1] CRAN (R 3.6.0)                  
#>  desc          1.2.0   2018-05-01 [1] CRAN (R 3.6.0)                  
#>  devtools      2.0.2   2019-04-08 [1] CRAN (R 3.6.0)                  
#>  digest        0.6.19  2019-05-20 [1] CRAN (R 3.6.0)                  
#>  dplyr       * 0.8.1   2019-07-02 [1] Github (tidyverse/dplyr@f01e5e9)
#>  evaluate      0.14    2019-05-28 [1] CRAN (R 3.6.0)                  
#>  fansi         0.4.0   2018-10-05 [1] CRAN (R 3.6.0)                  
#>  fs            1.3.1   2019-05-06 [1] CRAN (R 3.6.0)                  
#>  glue          1.3.1   2019-03-12 [1] CRAN (R 3.6.0)                  
#>  highr         0.8     2019-03-20 [1] CRAN (R 3.6.0)                  
#>  htmltools     0.3.6   2017-04-28 [1] CRAN (R 3.6.0)                  
#>  knitr         1.23    2019-05-18 [1] CRAN (R 3.6.0)                  
#>  magrittr      1.5     2014-11-22 [1] CRAN (R 3.6.0)                  
#>  memoise       1.1.0   2017-04-21 [1] CRAN (R 3.6.0)                  
#>  pillar        1.4.2   2019-06-29 [1] CRAN (R 3.6.0)                  
#>  pkgbuild      1.0.3   2019-03-20 [1] CRAN (R 3.6.0)                  
#>  pkgconfig     2.0.2   2018-08-16 [1] CRAN (R 3.6.0)                  
#>  pkgload       1.0.2   2018-10-29 [1] CRAN (R 3.6.0)                  
#>  prettyunits   1.0.2   2015-07-13 [1] CRAN (R 3.6.0)                  
#>  processx      3.3.1   2019-05-08 [1] CRAN (R 3.6.0)                  
#>  ps            1.3.0   2018-12-21 [1] CRAN (R 3.6.0)                  
#>  purrr         0.3.2   2019-03-15 [1] CRAN (R 3.6.0)                  
#>  R6            2.4.0   2019-02-14 [1] CRAN (R 3.6.0)                  
#>  Rcpp          1.0.1   2019-03-17 [1] CRAN (R 3.6.0)                  
#>  remotes       2.1.0   2019-06-24 [1] CRAN (R 3.6.0)                  
#>  rlang         0.4.0   2019-06-25 [1] CRAN (R 3.6.0)                  
#>  rmarkdown     1.13    2019-05-22 [1] CRAN (R 3.6.0)                  
#>  rprojroot     1.3-2   2018-01-03 [1] CRAN (R 3.6.0)                  
#>  sessioninfo   1.1.1   2018-11-05 [1] CRAN (R 3.6.0)                  
#>  stringi       1.4.3   2019-03-12 [1] CRAN (R 3.6.0)                  
#>  stringr       1.4.0   2019-02-10 [1] CRAN (R 3.6.0)                  
#>  testthat      2.1.1   2019-04-23 [1] CRAN (R 3.6.0)                  
#>  tibble        2.1.3   2019-06-06 [1] CRAN (R 3.6.0)                  
#>  tidyselect    0.2.5   2018-10-11 [1] CRAN (R 3.6.0)                  
#>  usethis       1.5.0   2019-04-07 [1] CRAN (R 3.6.0)                  
#>  utf8          1.1.4   2018-05-24 [1] CRAN (R 3.6.0)                  
#>  vctrs         0.1.0   2018-11-29 [1] CRAN (R 3.6.0)                  
#>  withr         2.1.2   2018-03-15 [1] CRAN (R 3.6.0)                  
#>  xfun          0.8     2019-06-25 [1] CRAN (R 3.6.0)                  
#>  yaml          2.2.0   2018-07-25 [1] CRAN (R 3.6.0)                  
#>  zeallot       0.1.0   2018-01-28 [1] CRAN (R 3.6.0)                  
#> 
#> [1] C:/Users/Ben Schneider/Documents/R/win-library/3.6
#> [2] C:/Program Files/R/R-3.6.0/library

Using dplyr 0.8.2

# Using dplyr 0.8.2 ----
    
  ## Install current CRAN version 0.8.2
    install.packages('dplyr')
#> Installing package into 'C:/Users/Ben Schneider/Documents/R/win-library/3.6'
#> (as 'lib' is unspecified)
#> package 'dplyr' successfully unpacked and MD5 sums checked
#> 
#> The downloaded binary packages are in
#>  C:\Users\Ben Schneider\AppData\Local\Temp\Rtmp2VU53r\downloaded_packages
    
  ## Run example
    library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
    mtcars <- tibble::as_tibble(mtcars)
    rename_all(mtcars,
               function(x) case_when(x == 'mpg' ~ 'fuel_efficiency',
                                     TRUE ~ x))
#> must have class `character`, not class `dplyr_sel_vars/character`

Created on 2019-07-02 by the reprex package (v0.3.0)

Session info
devtools::session_info()
#> - Session info ----------------------------------------------------------
#>  setting  value                       
#>  version  R version 3.6.0 (2019-04-26)
#>  os       Windows 10 x64              
#>  system   x86_64, mingw32             
#>  ui       RTerm                       
#>  language (EN)                        
#>  collate  English_United States.1252  
#>  ctype    English_United States.1252  
#>  tz       America/New_York            
#>  date     2019-07-02                  
#> 
#> - Packages --------------------------------------------------------------
#>  package     * version date       lib source        
#>  assertthat    0.2.1   2019-03-21 [1] CRAN (R 3.6.0)
#>  backports     1.1.4   2019-04-10 [1] CRAN (R 3.6.0)
#>  callr         3.2.0   2019-03-15 [1] CRAN (R 3.6.0)
#>  cli           1.1.0   2019-03-19 [1] CRAN (R 3.6.0)
#>  crayon        1.3.4   2017-09-16 [1] CRAN (R 3.6.0)
#>  desc          1.2.0   2018-05-01 [1] CRAN (R 3.6.0)
#>  devtools      2.0.2   2019-04-08 [1] CRAN (R 3.6.0)
#>  digest        0.6.19  2019-05-20 [1] CRAN (R 3.6.0)
#>  dplyr       * 0.8.2   2019-06-29 [1] CRAN (R 3.6.0)
#>  evaluate      0.14    2019-05-28 [1] CRAN (R 3.6.0)
#>  fs            1.3.1   2019-05-06 [1] CRAN (R 3.6.0)
#>  glue          1.3.1   2019-03-12 [1] CRAN (R 3.6.0)
#>  highr         0.8     2019-03-20 [1] CRAN (R 3.6.0)
#>  htmltools     0.3.6   2017-04-28 [1] CRAN (R 3.6.0)
#>  knitr         1.23    2019-05-18 [1] CRAN (R 3.6.0)
#>  magrittr      1.5     2014-11-22 [1] CRAN (R 3.6.0)
#>  memoise       1.1.0   2017-04-21 [1] CRAN (R 3.6.0)
#>  pillar        1.4.2   2019-06-29 [1] CRAN (R 3.6.0)
#>  pkgbuild      1.0.3   2019-03-20 [1] CRAN (R 3.6.0)
#>  pkgconfig     2.0.2   2018-08-16 [1] CRAN (R 3.6.0)
#>  pkgload       1.0.2   2018-10-29 [1] CRAN (R 3.6.0)
#>  prettyunits   1.0.2   2015-07-13 [1] CRAN (R 3.6.0)
#>  processx      3.3.1   2019-05-08 [1] CRAN (R 3.6.0)
#>  ps            1.3.0   2018-12-21 [1] CRAN (R 3.6.0)
#>  purrr         0.3.2   2019-03-15 [1] CRAN (R 3.6.0)
#>  R6            2.4.0   2019-02-14 [1] CRAN (R 3.6.0)
#>  Rcpp          1.0.1   2019-03-17 [1] CRAN (R 3.6.0)
#>  remotes       2.1.0   2019-06-24 [1] CRAN (R 3.6.0)
#>  rlang         0.4.0   2019-06-25 [1] CRAN (R 3.6.0)
#>  rmarkdown     1.13    2019-05-22 [1] CRAN (R 3.6.0)
#>  rprojroot     1.3-2   2018-01-03 [1] CRAN (R 3.6.0)
#>  sessioninfo   1.1.1   2018-11-05 [1] CRAN (R 3.6.0)
#>  stringi       1.4.3   2019-03-12 [1] CRAN (R 3.6.0)
#>  stringr       1.4.0   2019-02-10 [1] CRAN (R 3.6.0)
#>  testthat      2.1.1   2019-04-23 [1] CRAN (R 3.6.0)
#>  tibble        2.1.3   2019-06-06 [1] CRAN (R 3.6.0)
#>  tidyselect    0.2.5   2018-10-11 [1] CRAN (R 3.6.0)
#>  usethis       1.5.0   2019-04-07 [1] CRAN (R 3.6.0)
#>  withr         2.1.2   2018-03-15 [1] CRAN (R 3.6.0)
#>  xfun          0.8     2019-06-25 [1] CRAN (R 3.6.0)
#>  yaml          2.2.0   2018-07-25 [1] CRAN (R 3.6.0)
#> 
#> [1] C:/Users/Ben Schneider/Documents/R/win-library/3.6
#> [2] C:/Program Files/R/R-3.6.0/library
@romainfrancois
Copy link
Member

There is a fix in place in #4466 but in the meantime, you might use as.character() e.g.

library(dplyr, warn.conflicts = FALSE)

mtcars <- tibble::as_tibble(mtcars)
rename_all(mtcars,
  function(x) case_when(x == 'mpg' ~ 'fuel_efficiency',
    TRUE ~ as.character(x)))
#> # A tibble: 32 x 11
#>    fuel_efficiency   cyl  disp    hp  drat    wt  qsec    vs    am  gear
#>              <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#>  1            21       6  160    110  3.9   2.62  16.5     0     1     4
#>  2            21       6  160    110  3.9   2.88  17.0     0     1     4
#>  3            22.8     4  108     93  3.85  2.32  18.6     1     1     4
#>  4            21.4     6  258    110  3.08  3.22  19.4     1     0     3
#>  5            18.7     8  360    175  3.15  3.44  17.0     0     0     3
#>  6            18.1     6  225    105  2.76  3.46  20.2     1     0     3
#>  7            14.3     8  360    245  3.21  3.57  15.8     0     0     3
#>  8            24.4     4  147.    62  3.69  3.19  20       1     0     4
#>  9            22.8     4  141.    95  3.92  3.15  22.9     1     0     4
#> 10            19.2     6  168.   123  3.92  3.44  18.3     1     0     4
#> # … with 22 more rows, and 1 more variable: carb <dbl>

@bschneidr
Copy link
Contributor Author

Beautiful, thanks @romainfrancois!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants