Cómo escribir una función R que evalúa una expresión dentro de un marco de datos
Rompecabezas para R cognoscenti: Digamos que tenemos un marco de datos:
df <- data.frame( a = 1:5, b = 1:5 )
Sé que podemos hacer cosas como
with(df, a)
para obtener un vector de resultados.
Pero, ¿cómo escribo una función que toma una expresión (comoa
oa > 3
) y hace lo mismo dentro. Es decir. Quiero escribir una funcionfn
que toma un marco de datos y una expresión como argumentos y devuelve el resultado de evaluar la expresión "dentro" del marco de datos como un entorno.
No importa que esto suene artificial (podría usarwith
como arriba), pero esta es solo una versión simplificada de una función más compleja que estoy escribiendo. Probé varias variantes (usandoeval
, with
, envir
, substitute
, local
, etc.) pero ninguno de ellos funciona. Por ejemplo si definofn
al igual que:
fn <- function(dat, expr) {
eval(expr, envir = dat)
}
Me sale este error:
> fn( df, a )
Error in eval(expr, envir = dat) : object 'a' not found
Claramente, me falta algo sutil sobre los entornos y la evaluación. ¿Hay alguna manera de definir tal función?