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)
            )
         )
)


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow