library(rlang)
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
library(purrr)
#>
#> Attaching package: 'purrr'
#> The following objects are masked from 'package:dplyr':
#>
#> contains, order_by
#> The following objects are masked from 'package:rlang':
#>
#> %||%, %@%, as_function, flatten, flatten_chr, flatten_dbl,
#> flatten_int, flatten_lgl, invoke, is_atomic, is_bare_atomic,
#> is_bare_character, is_bare_double, is_bare_integer,
#> is_bare_list, is_bare_logical, is_bare_numeric,
#> is_bare_vector, is_character, is_double, is_empty, is_formula,
#> is_function, is_integer, is_list, is_logical, is_null,
#> is_scalar_atomic, is_scalar_character, is_scalar_double,
#> is_scalar_integer, is_scalar_list, is_scalar_logical,
#> is_scalar_vector, is_vector, list_along, prepend, rep_along,
#> set_names, splice
# this works
mtcars %>% mutate(x = reduce(list(am, gear, carb), `+`))
#> mpg cyl disp hp drat wt qsec vs am gear carb x
#> 1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 9
#> 2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 9
#> 3 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 6
#> 4 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 4
#> 5 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 5
#> 6 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 4
#> 7 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 7
#> 8 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 6
#> 9 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 6
#> 10 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4 8
#> 11 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4 8
#> 12 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3 6
#> 13 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3 6
#> 14 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3 6
#> 15 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4 7
#> 16 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4 7
#> 17 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4 7
#> 18 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 6
#> 19 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2 7
#> 20 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 6
#> 21 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 4
#> 22 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2 5
#> 23 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2 5
#> 24 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4 7
#> 25 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2 5
#> 26 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1 6
#> 27 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2 8
#> 28 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2 8
#> 29 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4 10
#> 30 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6 12
#> 31 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8 14
#> 32 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2 7
# so does this
mtcars %>% mutate(x = pmap(list(am, gear, carb), sum))
#> mpg cyl disp hp drat wt qsec vs am gear carb x
#> 1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 9
#> 2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 9
#> 3 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 6
#> 4 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 4
#> 5 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 5
#> 6 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 4
#> 7 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 7
#> 8 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 6
#> 9 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 6
#> 10 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4 8
#> 11 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4 8
#> 12 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3 6
#> 13 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3 6
#> 14 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3 6
#> 15 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4 7
#> 16 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4 7
#> 17 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4 7
#> 18 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 6
#> 19 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2 7
#> 20 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 6
#> 21 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 4
#> 22 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2 5
#> 23 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2 5
#> 24 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4 7
#> 25 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2 5
#> 26 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1 6
#> 27 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2 8
#> 28 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2 8
#> 29 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4 10
#> 30 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6 12
#> 31 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8 14
#> 32 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2 7
# what if we store in a variable?
x <- colnames(mtcars) %>% tail(3)
x
#> [1] "am" "gear" "carb"
# I think this should work, but it doesn't
mtcars %>% mutate(x = reduce(!!syms(x), `+`))
#> Error in mutate_impl(.data, dots): Evaluation error: non-numeric argument to binary operator.
# especially odd since it emits _exactly_ what I did before
expr(mtcars %>% mutate(x = reduce(!!syms(x), `+`)))
#> mtcars %>% mutate(x = reduce(list(am, gear, carb), `+`))
# this _does_ work, but feels like a workaround
mtcars %>% mutate(x = reduce(select(., x), `+`))
#> mpg cyl disp hp drat wt qsec vs am gear carb x
#> 1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 9
#> 2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 9
#> 3 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 6
#> 4 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 4
#> 5 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 5
#> 6 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 4
#> 7 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 7
#> 8 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 6
#> 9 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 6
#> 10 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4 8
#> 11 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4 8
#> 12 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3 6
#> 13 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3 6
#> 14 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3 6
#> 15 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4 7
#> 16 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4 7
#> 17 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4 7
#> 18 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 6
#> 19 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2 7
#> 20 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 6
#> 21 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 4
#> 22 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2 5
#> 23 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2 5
#> 24 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4 7
#> 25 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2 5
#> 26 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1 6
#> 27 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2 8
#> 28 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2 8
#> 29 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4 10
#> 30 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6 12
#> 31 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8 14
#> 32 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2 7
devtools::session_info(c("rlang", "dplyr", "purrr"))
#> Session info --------------------------------------------------------------
#> setting value
#> version R version 3.4.1 (2017-06-30)
#> system x86_64, linux-gnu
#> ui X11
#> language (EN)
#> collate en_US.UTF-8
#> tz America/New_York
#> date 2017-08-02
#> Packages ------------------------------------------------------------------
#> package * version date source
#> assertthat 0.2.0 2017-04-11 CRAN (R 3.4.0)
#> BH 1.62.0-1 2016-11-19 CRAN (R 3.4.0)
#> bindr 0.1 2016-11-13 cran (@0.1)
#> bindrcpp * 0.2 2017-06-17 CRAN (R 3.4.0)
#> dplyr * 0.7.2 2017-07-20 CRAN (R 3.4.1)
#> glue 1.1.1 2017-06-21 CRAN (R 3.4.0)
#> lazyeval 0.2.0 2016-06-12 CRAN (R 3.4.0)
#> magrittr 1.5 2014-11-22 CRAN (R 3.4.0)
#> pkgconfig 2.0.1 2017-03-21 cran (@2.0.1)
#> plogr 0.1-1 2016-09-24 cran (@0.1-1)
#> purrr * 0.2.2.2 2017-05-11 CRAN (R 3.4.0)
#> R6 2.2.1 2017-05-10 cran (@2.2.1)
#> Rcpp 0.12.11 2017-05-22 cran (@0.12.11)
#> rlang * 0.1.1 2017-05-18 CRAN (R 3.4.0)
#> tibble 1.3.3 2017-05-30 Github (tidyverse/tibble@b2275d5)
Last active
August 2, 2017 20:03
-
-
Save ClaytonJY/f0a91018f2023140272a1891b3eb8883 to your computer and use it in GitHub Desktop.
tidyeval not behaving when used inside purrr and dplyr
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Added a not-quite-right-feeling workaround based on
select
now working with character vectors.