R Language
Icke-standard utvärdering och standardutvärdering
Sök…
Introduktion
Dplyr och många moderna bibliotek i R använder icke-standard utvärdering (NSE) för interaktiv programmering och standardutvärdering (SE) för programmering 1 .
Exempelvis använder summarise()
-funktionen icke-standardutvärdering men förlitar sig på summarise_()
som använder standardutvärdering.
Det lata biblioteket gör det enkelt att förvandla standard utvärderingsfunktion till NSE-funktioner.
Exempel med vanliga dplyr-verb
NSE-funktioner bör användas i interaktiv programmering. Men när man utvecklar nya funktioner i ett nytt paket är det bättre att använda SE-versionen.
Ladda dplyr och lazyeval:
library(dplyr)
library(lazyeval)
Filtrering
NSE-version
filter(mtcars, cyl == 8)
filter(mtcars, cyl < 6)
filter(mtcars, cyl < 6 & vs == 1)
SE-version (ska användas vid programmering av funktioner i ett nytt paket)
filter_(mtcars, .dots = list(~ cyl == 8))
filter_(mtcars, .dots = list(~ cyl < 6))
filter_(mtcars, .dots = list(~ cyl < 6, ~ vs == 1))
Sammanfatta
NSE-version
summarise(mtcars, mean(disp))
summarise(mtcars, mean_disp = mean(disp))
SE-version
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))))
Mutera
NSE-version
mutate(mtcars, displ_l = disp / 61.0237)
SE-version
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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow