Pasando el nombre de la columna como argumento en una función dentro de tuberías.
Estoy intentando escribir una función pasando un nombre de variable como argumento. Luego se utiliza en un flujo aguas abajo para mutar una variable.
Utilizando un enfoque más clásico, pero quizás un poco torpe, puedo hacer esto:
var = "Sepal.Width"
scale_fun1 = function(dat,var) {
dat[,"new_var"] = dat[,var]*100
return(dat)
}
scale_fun1(iris,var)
Pensé que esto sería sencillo utilizando un pipe, pero resultó ser más difícil de lo que pensé, ya que cuando la función pasa la var por el pipe, no se analiza como debería, lo que da como resultado un error de operador binario de argumento no numérico. ¿Cómo puedo solucionarlo por favor?
var = "Sepal.Width"
scale_fun2 = function(dat,var) {
iris %>% dplyr::mutate(new_variable = var * 100)
}
scale_fun2(iris,var)
davy.ai
El problema con
scale_fun2
es quevar
se está pasando como una cadena de caracteres, pero debe evaluarse como un nombre de variable en la función mutate. Un enfoque es usar!!sym()
para convertir la cadena en un símbolo y luego evaluarlo dentro de la función mutate:Esto utiliza el operador !! (doble admiración) para indicar a dplyr que evalúe el símbolo que crea
sym()
.