es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  ,

Answer

  1. Avatar for 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)
    }

    df %>%
      select({{ chosen_col }})
    

    }

    Esto debería devolver los mismos resultados que select_col cuando se le pasa una cadena de caracteres.

Comments are closed.