Ricerca…


introduzione

Dplyr e molte librerie moderne in R usano la valutazione non standard (NSE) per la programmazione interattiva e la valutazione standard (SE) per la programmazione 1 .

Ad esempio, la funzione summarise() utilizza una valutazione non standard ma si basa su summarise_() che utilizza la valutazione standard.

La libreria lazyeval rende semplice trasformare la funzione di valutazione standard in funzioni NSE.

Esempi con verbi dplyr standard

Le funzioni NSE dovrebbero essere utilizzate nella programmazione interattiva. Tuttavia, quando si sviluppano nuove funzioni in un nuovo pacchetto, è meglio usare la versione SE.

Carica dplyr e lazyeval:

library(dplyr)
library(lazyeval)

filtraggio

Versione NSE

filter(mtcars, cyl == 8)
filter(mtcars, cyl < 6)
filter(mtcars, cyl < 6 & vs == 1)

Versione SE (da utilizzare quando si programmano le funzioni in un nuovo pacchetto)

filter_(mtcars, .dots = list(~ cyl == 8))
filter_(mtcars, .dots = list(~ cyl < 6))
filter_(mtcars, .dots = list(~ cyl < 6, ~ vs == 1))

Ricapitolare

Versione NSE

summarise(mtcars,  mean(disp))
summarise(mtcars,  mean_disp = mean(disp))

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

mutate

Versione NSE

mutate(mtcars, displ_l = disp / 61.0237)

Versione 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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow