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


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow