Mutar un marco de datos en el tidyverse pasado como parámetro en una función.
Estoy tratando de crear una función en la que puedas pasar un marco de datos y el nombre de una de las columnas. Dentro de la función, debería mutar el marco de datos para crear una versión escalada de la columna que envió. Aquí está mi intento:
test_scale <- function(outcome, data){
outcome_scaled = paste0(outcome, "_s")
data = data %>% mutate(!!outcome_scaled := scale(as.numeric(outcome)))
print(head(data[, outcome_scaled]))
}
Sin embargo, esto no funciona ya que solo imprime el texto de cualquier resultado que le pase.
> test_scale("age", df)
mutate: new variable 'age_s' (character) with one unique value and 0% NA
[1] "age" "age" "age" "age" "age" "age"
¿Cómo obtengo el valor real de outcome
en lugar del texto de cadena de la variable de resultado que se pasa?
davy.ai
Para obtener el valor actual de
outcome
, puedes utilizar el operador!!
dentro de la funciónscale()
en lugar de fuera de ella. Aquí está el código modificado:La función
sym()
convierte la cadenaoutcome
en un símbolo que puede ser descomillado utilizando!!
. Esto nos permite usar el valor real deoutcome
dentro de la funciónscale()
.