R Language
Évaluation non standard et évaluation standard
Recherche…
Introduction
Dplyr et de nombreuses bibliothèques modernes de R utilisent l'évaluation non standard (NSE) pour la programmation interactive et l'évaluation standard (SE) pour la programmation 1 .
Par exemple, la fonction summarise()
utilise une évaluation non standard mais s'appuie sur le summarise_()
qui utilise l'évaluation standard.
La bibliothèque paresseuse facilite la conversion de la fonction d’évaluation standard en fonctions NSE.
Exemples avec des verbes standard dplyr
Les fonctions NSE doivent être utilisées dans la programmation interactive. Cependant, lors du développement de nouvelles fonctions dans un nouveau package, il est préférable d’utiliser la version SE.
Chargez dplyr et lazyeval:
library(dplyr)
library(lazyeval)
Filtration
Version NSE
filter(mtcars, cyl == 8)
filter(mtcars, cyl < 6)
filter(mtcars, cyl < 6 & vs == 1)
Version SE (à utiliser lors de la programmation de fonctions dans un nouveau package)
filter_(mtcars, .dots = list(~ cyl == 8))
filter_(mtcars, .dots = list(~ cyl < 6))
filter_(mtcars, .dots = list(~ cyl < 6, ~ vs == 1))
Résumer
Version NSE
summarise(mtcars, mean(disp))
summarise(mtcars, mean_disp = mean(disp))
Version 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))))
Subir une mutation
Version NSE
mutate(mtcars, displ_l = disp / 61.0237)
Version SE
mutate_(
.data = mtcars,
.dots = list(
"displ_l" = lazyeval::interp(
~ x / 61.0237, x = quote(disp)
)
)
)