수색…


소개

Drier과 R의 많은 현대 라이브러리는 프로그래밍을위한 대화식 프로그래밍과 표준 평가 (SE)를위한 비표준 평가 (NSE)를 사용합니다 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