Me gustaría escribir un contenedor alrededor de una función personalizada que tome algunos vectores como entrada (como: mtcars$hp
, mtcars$am
etc.) para tomar la entrada como nombre de marco de datos (como data
parámetro, ej .: mtcars
) y nombres de variables (como: hp
y am
), como es habitual en la mayoría de las funciones estándar.`With` uso dentro de la función (contenedor)
Pero tengo algunos problemas, mi función propuesta 'demo' (una envoltura alrededor de mean
no funciona
Código:.
f <- function(x, data=NULL) {
if (!missing(data)) {
with(data, mean(x))
} else {
mean(x)
}
}
Correr contra un vector trabajos de curso:
> f(mtcars$hp)
[1] 146.69
Pero with
falla desafortunadamente:
> f(hp, mtcars)
Error in with(d, mean(x)) : object 'hp' not found
Mientras que en el entorno global/sin mi función personalizada funciona nada:
> with(mtcars, mean(hp))
[1] 146.69
me han tratado de hacer algún experimento con substitute
, deparse
y otros, pero sin ningún éxito. Cualquier sugerencia sería bienvenida!
Eche un vistazo al artículo de wiki de @Hadley Wickham aquí: https://github.com/hadley/devtools/wiki/Evaluation – Andrie
¿No debería ser 'f (hp, mtcars)'? – James
Otra opción que quizás desee explorar es usar una fórmula, por lo que lo llamaría de forma ligeramente diferente - foo (~ hp, mtcars) - y luego usar cosas como model.frame para obtener los valores. – Spacedman