R Language
Evaluación no estándar y evaluación estándar
Buscar..
Introducción
Dplyr y muchas bibliotecas modernas en R utilizan la evaluación no estándar (NSE) para la programación interactiva y la evaluación estándar (SE) para la programación 1 .
Por ejemplo, la función summarise()
utiliza una evaluación no estándar pero se basa en el summarise_()
que utiliza la evaluación estándar.
La biblioteca perezosa facilita la conversión de la función de evaluación estándar en funciones NSE.
Ejemplos con verbos dplyr estándar
Las funciones de NSE se deben utilizar en la programación interactiva. Sin embargo, al desarrollar nuevas funciones en un nuevo paquete, es mejor usar la versión SE.
Carga dplyr y lazyeval:
library(dplyr)
library(lazyeval)
Filtración
Versión NSE
filter(mtcars, cyl == 8)
filter(mtcars, cyl < 6)
filter(mtcars, cyl < 6 & vs == 1)
Versión SE (para usar cuando se programan funciones en un nuevo paquete)
filter_(mtcars, .dots = list(~ cyl == 8))
filter_(mtcars, .dots = list(~ cyl < 6))
filter_(mtcars, .dots = list(~ cyl < 6, ~ vs == 1))
Resumir
Versión NSE
summarise(mtcars, mean(disp))
summarise(mtcars, mean_disp = mean(disp))
Versión SE
summarise_(mtcars, .dots = lazyeval::interp(~ mean(x), x = quote(disp)))
summarise_(mtcars, .dots = setNames(list(lazyeval::interp(~ mean(x), x = quote(disp))), "mean_disp"))
summarise_(mtcars, .dots = list("mean_disp" = lazyeval::interp(~ mean(x), x = quote(disp))))
Mudar
Versión NSE
mutate(mtcars, displ_l = disp / 61.0237)
Versión SE
mutate_(
.data = mtcars,
.dots = list(
"displ_l" = lazyeval::interp(
~ x / 61.0237, x = quote(disp)
)
)
)