Поиск…


Вступление

Dplyr и многие современные библиотеки в R используют нестандартную оценку (NSE) для интерактивного программирования и стандартной оценки (SE) для программирования 1 .

Например, summarise() использование функции нестандартная оценка , но полагается на summarise_() , который использует стандартную оценку.

Библиотека lazyeval позволяет легко превратить стандартную функцию оценки в функции NSE.

Примеры со стандартными глаголами dplyr

Функции NSE должны использоваться в интерактивном программировании. Однако при разработке новых функций в новом пакете лучше использовать версию SE.

Загрузить dplyr и lazyeval:

library(dplyr)
library(lazyeval)

фильтрация

Версия NSE

filter(mtcars, cyl == 8)
filter(mtcars, cyl < 6)
filter(mtcars, cyl < 6 & vs == 1)

SE (для использования при программировании функций в новом пакете)

filter_(mtcars, .dots = list(~ cyl == 8))
filter_(mtcars, .dots = list(~ cyl < 6))
filter_(mtcars, .dots = list(~ cyl < 6, ~ vs == 1))

Суммировать

Версия NSE

summarise(mtcars,  mean(disp))
summarise(mtcars,  mean_disp = mean(disp))

Версия 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))))

мутировать

Версия NSE

mutate(mtcars, displ_l = disp / 61.0237)

Версия SE

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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow