Pase un nombre de columna data.frame a una función
Estoy tratando de escribir una función para aceptar un data.frame (x
) y acolumn
de eso. La función realiza algunos cálculos en x y luego devuelve otro data.frame. Estoy atascado en el método de mejores prácticas para pasar el nombre de la columna a la función.
Los dos ejemplos mínimosfun1
yfun2
a continuación producen el resultado deseado, pudiendo realizar operaciones enx$column
, utilizandomax()
como ejemplo. Sin embargo, ambos confían en lo aparentemente (al menos para mí) poco elegante
substitute()
y posiblementeeval()
La necesidad de pasar el nombre de la columna como un vector de caracteres.fun1 <- function(x, column){
do.call("max", list(substitute(x[a], list(a = column))))
}
fun2 <- function(x, column){
max(eval((substitute(x[a], list(a = column)))))
}
df <- data.frame(B = rnorm(10))
fun1(df, "B")
fun2(df, "B")
Me gustaría poder llamar a la función comofun(df, B)
, por ejemplo. Otras opciones que he considerado pero que no he probado:
column
como un entero del número de columna. Creo que esto evitaríasubstitute()
. Idealmente, la función podría aceptar cualquiera.with(x, get(column))
, pero, incluso si funciona, creo que esto aún requeriríasubstitute
Hacer uso deformula()
ymatch.call()
, ninguno de los cuales tengo mucha experiencia.Sumisión: Esdo.call()
preferido sobreeval()
?