メモ:最近のdplyr::select()は列を文字列で指定できますよ

なんか意外と知られていないようだったのでいちおうブログにも書いておくと、

select(iris, Sepal.Length, Petal.Length)

というのは、

select(iris, "Sepal.Length", "Petal.Length")

とも、

select(iris, c("Sepal.Length", "Petal.Length"))

とも書けます。

このへんは以下のスライドに書いたのでご参照ください。

参考: tidyeval

ちなみに、上のコードは、変数xに列名を入れてselect()するという書き方もできます。

x <- c("Sepal.Length", "Petal.Length")
select(iris, x)

しかし、これはxという名前の列がデータに含まれているとSepal.LengthPetal.Lengthではなくそっちの列が選ばれてしまうので、!!でunquoteしておく方が安全です。!!!でもOKです。

select(iris, !! x)

tidyevalの詳しい説明は割愛しますが、!!!!!はそれぞれ以下のようにxを展開しています。

rlang::expr(select(iris, !! x))
#> select(iris, c("Sepal.Length", "Petal.Length"))

rlang::expr(select(iris, !!! x))
#> select(iris, "Sepal.Length", "Petal.Length")