R Language
Valutazione non standard e valutazione standard
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)
)
)
)