R Language
非標準評価と標準評価
サーチ…
前書き
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