rompecabezas para los conocedores R: Digamos que tenemos una trama de datos:Cómo escribir una función de R, que evalúa una expresión dentro de una trama 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 puedo escribir una función que toma una expresión (como a
o a > 3
) y hace lo mismo dentro. Es decir. Quiero escribir una función fn
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 simplemente usar with
como arriba), pero esta es solo una versión simplificada de una función más compleja que estoy escribiendo. Probé varias variantes (usando eval
, with
, envir
, substitute
, local
, etc.) pero ninguna de ellas funciona. Por ejemplo, si defino fn
así:
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
Es evidente que me falta algo sutil sobre los entornos y evaluación. ¿Hay alguna manera de definir tal función?
Hay una sección en [wiki de Hadley sobre este tema] (https: // github.com/hadley/devtools/wiki/Evaluation) – Marek
@Marek es una gran referencia para leer, ¡gracias! –
¿Se puede acceder a esta página? –