muter une variable avec curly-curly [duplicate]

Aug 17 2020

J'ai utilisé curly-curly avec group_byet summarisecomme décrit dans l' annonce de rlang . Mais je ne peux pas le faire fonctionner lors de la mutation d'une variable en place. Quelle est la meilleure façon de faire cela actuellement avec dplyr?

Disons que je veux fournir un nom de colonne sans guillemets et le faire muter, voici un exemple de fonction de jouet qui ne fonctionne pas:

my_fun <- function(dat, var_name){
  dat %>%
    mutate({{var_name}} = 1)
}

my_fun(mtcars, cyl)

Que devrait être cette mutateligne pour changer une colonne de mtcars en constante?

Réponses

3 AllanCameron Aug 17 2020 at 14:01

Vous devez utiliser l'opérateur d'affectation ( :=) si vous souhaitez utiliser le bouclé-bouclé pour spécifier un nom sur le côté gauche d'une affectation dans mutate:

my_fun <- function(dat, var_name){
  dat %>%
    mutate({{var_name}} := 1)
}

Ce qui permet:

my_fun(mtcars, cyl)
#>     mpg cyl  disp  hp drat    wt  qsec vs am gear carb
#> 1  21.0   1 160.0 110 3.90 2.620 16.46  0  1    4    4
#> 2  21.0   1 160.0 110 3.90 2.875 17.02  0  1    4    4
#> 3  22.8   1 108.0  93 3.85 2.320 18.61  1  1    4    1
#> 4  21.4   1 258.0 110 3.08 3.215 19.44  1  0    3    1
#> 5  18.7   1 360.0 175 3.15 3.440 17.02  0  0    3    2
#> 6  18.1   1 225.0 105 2.76 3.460 20.22  1  0    3    1
#> 7  14.3   1 360.0 245 3.21 3.570 15.84  0  0    3    4
#> 8  24.4   1 146.7  62 3.69 3.190 20.00  1  0    4    2
#> 9  22.8   1 140.8  95 3.92 3.150 22.90  1  0    4    2
#> 10 19.2   1 167.6 123 3.92 3.440 18.30  1  0    4    4
#> 11 17.8   1 167.6 123 3.92 3.440 18.90  1  0    4    4
#> 12 16.4   1 275.8 180 3.07 4.070 17.40  0  0    3    3
#> 13 17.3   1 275.8 180 3.07 3.730 17.60  0  0    3    3
#> 14 15.2   1 275.8 180 3.07 3.780 18.00  0  0    3    3
#> 15 10.4   1 472.0 205 2.93 5.250 17.98  0  0    3    4
#> 16 10.4   1 460.0 215 3.00 5.424 17.82  0  0    3    4
#> 17 14.7   1 440.0 230 3.23 5.345 17.42  0  0    3    4
#> 18 32.4   1  78.7  66 4.08 2.200 19.47  1  1    4    1
#> 19 30.4   1  75.7  52 4.93 1.615 18.52  1  1    4    2
#> 20 33.9   1  71.1  65 4.22 1.835 19.90  1  1    4    1
#> 21 21.5   1 120.1  97 3.70 2.465 20.01  1  0    3    1
#> 22 15.5   1 318.0 150 2.76 3.520 16.87  0  0    3    2
#> 23 15.2   1 304.0 150 3.15 3.435 17.30  0  0    3    2
#> 24 13.3   1 350.0 245 3.73 3.840 15.41  0  0    3    4
#> 25 19.2   1 400.0 175 3.08 3.845 17.05  0  0    3    2
#> 26 27.3   1  79.0  66 4.08 1.935 18.90  1  1    4    1
#> 27 26.0   1 120.3  91 4.43 2.140 16.70  0  1    5    2
#> 28 30.4   1  95.1 113 3.77 1.513 16.90  1  1    5    2
#> 29 15.8   1 351.0 264 4.22 3.170 14.50  0  1    5    4
#> 30 19.7   1 145.0 175 3.62 2.770 15.50  0  1    5    6
#> 31 15.0   1 301.0 335 3.54 3.570 14.60  0  1    5    8
#> 32 21.4   1 121.0 109 4.11 2.780 18.60  1  1    4    2