R Language
Niet-standaard evaluatie en standaard evaluatie
Zoeken…
Invoering
Dplyr en veel moderne bibliotheken in R gebruiken niet-standaard evaluatie (NSE) voor interactieve programmering en standaard evaluatie (SE) voor programmering 1 .
De functie summarise()
gebruikt bijvoorbeeld niet-standaardevaluatie, maar is afhankelijk van de summarise_()
die standaardevaluatie gebruikt.
De luie bibliotheek maakt het eenvoudig om de standaardevaluatiefunctie om te zetten in NSE-functies.
Voorbeelden met standaard dplyr-werkwoorden
NSE-functies moeten worden gebruikt in interactieve programmering. Bij het ontwikkelen van nieuwe functies in een nieuw pakket is het echter beter om de SE-versie te gebruiken.
Laad dplyr en lazyeval:
library(dplyr)
library(lazyeval)
filtering
NSE-versie
filter(mtcars, cyl == 8)
filter(mtcars, cyl < 6)
filter(mtcars, cyl < 6 & vs == 1)
SE-versie (te gebruiken bij het programmeren van functies in een nieuw pakket)
filter_(mtcars, .dots = list(~ cyl == 8))
filter_(mtcars, .dots = list(~ cyl < 6))
filter_(mtcars, .dots = list(~ cyl < 6, ~ vs == 1))
Samenvatten
NSE-versie
summarise(mtcars, mean(disp))
summarise(mtcars, mean_disp = mean(disp))
SE-versie
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))))
muteren
NSE-versie
mutate(mtcars, displ_l = disp / 61.0237)
SE-versie
mutate_(
.data = mtcars,
.dots = list(
"displ_l" = lazyeval::interp(
~ x / 61.0237, x = quote(disp)
)
)
)