メモ:dplyr 0.6.0は、select()するだけならtidyevalいらないっぽい

dplyrがもうCRANにsubmitされたという噂を聞いてNEWS.mdを読んでたら、こんなことが書かれていました。

  • select() (and the internal function select_vars()) now support column names in addition to column positions. As a result, expressions like select(mtcars, "cyl") are now allowed.

説明の意味はあんまり理解できないんですが、こんな感じです。select()select_()の使い分けで悩んでいた時代はもう過去ですね。

library(dplyr)

# 列名を変数名として指定
select(starwars, name, birth_year)
#> # A tibble: 87 x 2
#>                  name birth_year
#>                 <chr>      <dbl>
#>  1     Luke Skywalker       19.0
#>  2              C-3PO      112.0
#>  3              R2-D2       33.0
#>  4        Darth Vader       41.9
#>  5        Leia Organa       19.0
#>  6          Owen Lars       52.0
#>  7 Beru Whitesun lars       47.0
#>  8              R5-D4         NA
#>  9  Biggs Darklighter       24.0
#> 10     Obi-Wan Kenobi       57.0
#> # ... with 77 more rows
# 列名を文字列として指定
select(starwars, c("name", "birth_year"))
#> # A tibble: 87 x 2
#>                  name birth_year
#>                 <chr>      <dbl>
#>  1     Luke Skywalker       19.0
#>  2              C-3PO      112.0
#>  3              R2-D2       33.0
#>  4        Darth Vader       41.9
#>  5        Leia Organa       19.0
#>  6          Owen Lars       52.0
#>  7 Beru Whitesun lars       47.0
#>  8              R5-D4         NA
#>  9  Biggs Darklighter       24.0
#> 10     Obi-Wan Kenobi       57.0
#> # ... with 77 more rows
# 列名を変数に入れてそれを指定
col <- c("name", "birth_year")
select(starwars, col)
#> # A tibble: 87 x 2
#>                  name birth_year
#>                 <chr>      <dbl>
#>  1     Luke Skywalker       19.0
#>  2              C-3PO      112.0
#>  3              R2-D2       33.0
#>  4        Darth Vader       41.9
#>  5        Leia Organa       19.0
#>  6          Owen Lars       52.0
#>  7 Beru Whitesun lars       47.0
#>  8              R5-D4         NA
#>  9  Biggs Darklighter       24.0
#> 10     Obi-Wan Kenobi       57.0
#> # ... with 77 more rows

全部混ぜてもいける…

select(starwars, col, hair_color, "species")
#> # A tibble: 87 x 4
#>                  name birth_year    hair_color species
#>                 <chr>      <dbl>         <chr>   <chr>
#>  1     Luke Skywalker       19.0         blond   Human
#>  2              C-3PO      112.0          <NA>   Droid
#>  3              R2-D2       33.0          <NA>   Droid
#>  4        Darth Vader       41.9          none   Human
#>  5        Leia Organa       19.0         brown   Human
#>  6          Owen Lars       52.0   brown, grey   Human
#>  7 Beru Whitesun lars       47.0         brown   Human
#>  8              R5-D4         NA          <NA>   Droid
#>  9  Biggs Darklighter       24.0         black   Human
#> 10     Obi-Wan Kenobi       57.0 auburn, white   Human
#> # ... with 77 more rows

謎の便利さにたじろぎますが、dplyr 0.6.0のリリースはもうすぐです。備えよう。