Skip to content

Instantly share code, notes, and snippets.

@njtierney
Created October 2, 2020 02:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save njtierney/aa43c95bfbf4555970dbc8e09d6f4c20 to your computer and use it in GitHub Desktop.
Save njtierney/aa43c95bfbf4555970dbc8e09d6f4c20 to your computer and use it in GitHub Desktop.
library(tidyverse)
my_plot <- function(data, x,y){
  ggplot(data,
         aes(x = {{ x }},
             y = {{ y }})) + 
    geom_point()
}

library(palmerpenguins)

my_plot(penguins,
        x = bill_length_mm,
        y = flipper_length_mm)
#> Warning: Removed 2 rows containing missing values (geom_point).

my_mutate <- function(data, x, y){
  data %>% 
    mutate(z = {{ x }} + {{ y }})
}


my_mutate(penguins,
        x = bill_length_mm,
        y = flipper_length_mm)
#> # A tibble: 344 x 9
#>    species island bill_length_mm bill_depth_mm flipper_length_… body_mass_g
#>    <fct>   <fct>           <dbl>         <dbl>            <int>       <int>
#>  1 Adelie  Torge…           39.1          18.7              181        3750
#>  2 Adelie  Torge…           39.5          17.4              186        3800
#>  3 Adelie  Torge…           40.3          18                195        3250
#>  4 Adelie  Torge…           NA            NA                 NA          NA
#>  5 Adelie  Torge…           36.7          19.3              193        3450
#>  6 Adelie  Torge…           39.3          20.6              190        3650
#>  7 Adelie  Torge…           38.9          17.8              181        3625
#>  8 Adelie  Torge…           39.2          19.6              195        4675
#>  9 Adelie  Torge…           34.1          18.1              193        3475
#> 10 Adelie  Torge…           42            20.2              190        4250
#> # … with 334 more rows, and 3 more variables: sex <fct>, year <int>, z <dbl>

library(rlang)
#> 
#> Attaching package: 'rlang'
#> The following objects are masked from 'package:purrr':
#> 
#>     %@%, as_function, flatten, flatten_chr, flatten_dbl, flatten_int,
#>     flatten_lgl, flatten_raw, invoke, list_along, modify, prepend,
#>     splice
my_paste_vars <- function(data, x){
  message("capture the symbol")
  print(rlang::quo(x))
  message("capture the environment and the symbol")
  print(rlang::enquo(x))
  message("convert quosure into string")
  print(rlang::as_label(rlang::enquo(x)))
  
  my_var <- paste0(rlang::as_label(rlang::enquo(x)),
                   "_2")
  
  data %>% 
    mutate(!!my_var := {{x}}^2)
}

my_paste_vars(penguins, bill_length_mm)
#> capture the symbol
#> <quosure>
#> expr: ^x
#> env:  0x7faffdf568b0
#> capture the environment and the symbol
#> <quosure>
#> expr: ^bill_length_mm
#> env:  global
#> convert quosure into string
#> [1] "bill_length_mm"
#> # A tibble: 344 x 9
#>    species island bill_length_mm bill_depth_mm flipper_length_… body_mass_g
#>    <fct>   <fct>           <dbl>         <dbl>            <int>       <int>
#>  1 Adelie  Torge…           39.1          18.7              181        3750
#>  2 Adelie  Torge…           39.5          17.4              186        3800
#>  3 Adelie  Torge…           40.3          18                195        3250
#>  4 Adelie  Torge…           NA            NA                 NA          NA
#>  5 Adelie  Torge…           36.7          19.3              193        3450
#>  6 Adelie  Torge…           39.3          20.6              190        3650
#>  7 Adelie  Torge…           38.9          17.8              181        3625
#>  8 Adelie  Torge…           39.2          19.6              195        4675
#>  9 Adelie  Torge…           34.1          18.1              193        3475
#> 10 Adelie  Torge…           42            20.2              190        4250
#> # … with 334 more rows, and 3 more variables: sex <fct>, year <int>,
#> #   bill_length_mm_2 <dbl>

my_select_bang <- function(data, x){
  
  en_x <- rlang::enquo(x)
  
  data %>% dplyr::select(!!en_x)
}

my_select_bang(penguins, bill_length_mm)
#> # A tibble: 344 x 1
#>    bill_length_mm
#>             <dbl>
#>  1           39.1
#>  2           39.5
#>  3           40.3
#>  4           NA  
#>  5           36.7
#>  6           39.3
#>  7           38.9
#>  8           39.2
#>  9           34.1
#> 10           42  
#> # … with 334 more rows

my_select_cc <- function(data, x){
  
  data %>% select( {{ x }})
}

my_select_bang(penguins, bill_length_mm)
#> # A tibble: 344 x 1
#>    bill_length_mm
#>             <dbl>
#>  1           39.1
#>  2           39.5
#>  3           40.3
#>  4           NA  
#>  5           36.7
#>  6           39.3
#>  7           38.9
#>  8           39.2
#>  9           34.1
#> 10           42  
#> # … with 334 more rows
my_select_cc(penguins, bill_length_mm)
#> # A tibble: 344 x 1
#>    bill_length_mm
#>             <dbl>
#>  1           39.1
#>  2           39.5
#>  3           40.3
#>  4           NA  
#>  5           36.7
#>  6           39.3
#>  7           38.9
#>  8           39.2
#>  9           34.1
#> 10           42  
#> # … with 334 more rows

my_paste_vars(penguins, bill_length_mm)
#> capture the symbol
#> <quosure>
#> expr: ^x
#> env:  0x7faffb70ae18
#> capture the environment and the symbol
#> <quosure>
#> expr: ^bill_length_mm
#> env:  global
#> convert quosure into string
#> [1] "bill_length_mm"
#> # A tibble: 344 x 9
#>    species island bill_length_mm bill_depth_mm flipper_length_… body_mass_g
#>    <fct>   <fct>           <dbl>         <dbl>            <int>       <int>
#>  1 Adelie  Torge…           39.1          18.7              181        3750
#>  2 Adelie  Torge…           39.5          17.4              186        3800
#>  3 Adelie  Torge…           40.3          18                195        3250
#>  4 Adelie  Torge…           NA            NA                 NA          NA
#>  5 Adelie  Torge…           36.7          19.3              193        3450
#>  6 Adelie  Torge…           39.3          20.6              190        3650
#>  7 Adelie  Torge…           38.9          17.8              181        3625
#>  8 Adelie  Torge…           39.2          19.6              195        4675
#>  9 Adelie  Torge…           34.1          18.1              193        3475
#> 10 Adelie  Torge…           42            20.2              190        4250
#> # … with 334 more rows, and 3 more variables: sex <fct>, year <int>,
#> #   bill_length_mm_2 <dbl>

Created on 2020-10-02 by the reprex package (v0.3.0)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment