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.

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?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para obtener el valor actual de outcome, puedes utilizar el operador !! dentro de la función scale() en lugar de fuera de ella. Aquí está el código modificado:

    test_scale <- function(outcome, data){
      outcome_scaled = paste0(outcome, "_s")
      data = data %>% mutate(!!outcome_scaled := scale(as.numeric(!!sym(outcome))))
      print(head(data[, outcome_scaled]))
    }
    

    La función sym() convierte la cadena outcome en un símbolo que puede ser descomillado utilizando !!. Esto nos permite usar el valor real de outcome dentro de la función scale().

Comments are closed.