Olá pessoal,
Neste pequeno exemplo com group_by()
fiz uma função em que o argumento é a variável pela qual desejo agrupar os dados:
nomeDaFuncao <- function(variavel_grupo) {
mtcars |>
group_by(variavel_grupo)
}
Mas ao rodarmos
nomeDaFuncao(cyl)
Teremos esse erro:
Error in `group_by()`:
! Must group by variables found in `.data`.
x Column `variavel_grupo` is not found.
Run `rlang::last_error()` to see where the error occurred.
Called from: signal_abort(cnd, .file)
Browse[1]>
Aparentemente não há meios de fazer a variável de agrupamento um argumento de uma função, ou estou errado? Como contornar esse fato? Há como fazer com R base?
Humberto
Oi Humberto, tudo bem?
Segue duas formas de fazer (ainda com group_by):
# com curly curly {{ }}
nomeDaFuncao <- function(variavel_grupo) {
mtcars |>
# use o curly curly em volta do nome da var:
dplyr::group_by({{variavel_grupo}})
}
# funciona sem aspas
nomeDaFuncao(cyl)
#> # A tibble: 32 × 11
#> # Groups: cyl [3]
#> mpg cyl disp hp drat wt qsec vs am gear carb
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 21 6 160 110 3.9 2.62 16.5 0 1 4 4
#> 2 21 6 160 110 3.9 2.88 17.0 0 1 4 4
#> 3 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1
#> 4 21.4 6 258 110 3.08 3.22 19.4 1 0 3 1
#> 5 18.7 8 360 175 3.15 3.44 17.0 0 0 3 2
#> 6 18.1 6 225 105 2.76 3.46 20.2 1 0 3 1
#> 7 14.3 8 360 245 3.21 3.57 15.8 0 0 3 4
#> 8 24.4 4 147. 62 3.69 3.19 20 1 0 4 2
#> 9 22.8 4 141. 95 3.92 3.15 22.9 1 0 4 2
#> 10 19.2 6 168. 123 3.92 3.44 18.3 1 0 4 4
#> # … with 22 more rows
# -------------------------------------------
# com .data[[nomevar]]
nomeDaFuncao2 <- function(variavel_grupo) {
mtcars |>
# outra forma é usando o .data[[nomevar]]
dplyr::group_by(.data[[variavel_grupo]])
}
# funciona com aspas
nomeDaFuncao2("cyl")
#> # A tibble: 32 × 11
#> # Groups: cyl [3]
#> mpg cyl disp hp drat wt qsec vs am gear carb
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 21 6 160 110 3.9 2.62 16.5 0 1 4 4
#> 2 21 6 160 110 3.9 2.88 17.0 0 1 4 4
#> 3 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1
#> 4 21.4 6 258 110 3.08 3.22 19.4 1 0 3 1
#> 5 18.7 8 360 175 3.15 3.44 17.0 0 0 3 2
#> 6 18.1 6 225 105 2.76 3.46 20.2 1 0 3 1
#> 7 14.3 8 360 245 3.21 3.57 15.8 0 0 3 4
#> 8 24.4 4 147. 62 3.69 3.19 20 1 0 4 2
#> 9 22.8 4 141. 95 3.92 3.15 22.9 1 0 4 2
#> 10 19.2 6 168. 123 3.92 3.44 18.3 1 0 4 4
#> # … with 22 more rows
Created on 2022-03-17 by the reprex package (v2.0.1)
O @clente produziu conteúdos legais sobre isso!
Seguem alguns links:
2 curtidas
clente
Março 17, 2022, 8:51pm
3
Não posso deixar de mandar tbm o Rlang Para Filhotes: Tutorial: {rlang} para Filhotes hahahaha
2 curtidas
Olá Beatriz, excelente o curly! Pelo que vi ele permite ainda usarmos funções do R base dentro do tidyverse . Sempre me surpreendeu encontrar conflito ao misturar, algo inclusive que me encorajou pela opção resolver problemas usando o máximo possível o R base
1 curtida