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?

Respuestas a la pregunta(4)

Su respuesta a la pregunta