サーチ…


前書き

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