Pasando una variable de datos a una variable ambiental de función como objeto o cadena.
Toma esta función de juguete, que es solo un envoltorio alrededor de select de dplyr:
select_col <- function(df, chosen_col) {
if(is.character(enquo(chosen_col))){
df %>%
select(all_of(chosen_col))
} else {
df %>%
select({{ chosen_col }})
}
}
Lo que hace es permitir la selección de una columna pasada a chosen_col, independientemente de si esa columna se presenta como una variable de datos enmascarada como una variable ambiental o una cadena enmascarada como una variable ambiental.
Ambos de estos devuelven lo mismo:
mtcars %>%
select_col(chosen_col = mpg) %>%
head(2)
mpg
Mazda RX4 21
Mazda RX4 Wag 21
mtcars %>%
select_col(chosen_col = “mpg”) %>%
head(2)
mpg
Mazda RX4 21
Mazda RX4 Wag 21
Si bien select_col funciona, lo que quiero es algo más como esto que no funciona:
select_col_deseado <- function(df, chosen_col) {
if(is.character(enquo(chosen_col))){
chosen_col <- convertir_a_variable_ambiental(chosen_col)
}
df %>%
select({{ chosen_col }})
}
¿Qué puedo usar en lugar de la función inexistente convertir_a_variable_ambiental para que select_col_deseado devuelva las mismas cosas que select_col?
Soy consciente de que select ya hace esto fuera de una función.
davy.ai
Puede utilizar la función rlang::sym en lugar de la función inexistente convert_to_env_variable. Esto convertirá una cadena de caracteres en una variable de entorno. Por ejemplo:
select_col_desired <- function(df, chosen_col) {
if(is.character(enquo(chosen_col))){
chosen_col <- rlang::sym(chosen_col)
}
}
Esto debería devolver los mismos resultados que select_col cuando se le pasa una cadena de caracteres.