RのNSE(Non-Standard Evaluation)

RのNSE(Non-Standard Evaluation)というのがあって,便利な面とそうでない面がある. 本来なら,列名を指定するのに,“displ"のように指定すべきところを,ダブルクオーテーションなしでdisplとできるので,普段は便利だ.

library(tidyverse)
mpg %>%
  dplyr::select(displ, year, cyl)

ただし,パッケージ開発をするときにこの使い方をしていると,devtools::check()でWarningsとかNotesの対象になる. 新たな列名として使いたいときには,以下のようにする必要がある.変数に入れた文字列を使う時,既存の列の指定では.data[col_nameとして,新たな列のときは{{col_name}}({{“year_displ”}}はエラー)とする.

col_1 <- "year"
col_2 <- "displ"
new_col <- "year_displ"
  # `:=`を通常の関数みたいに使用
mpg %>%
  dplyr::transmute(`:=`({{new_col}}, stringr::str_c(.data[[col_1]], "_", .data[[col_2]])))
  # 以下でも同じ
mpg %>%
  dplyr::transmute({{new_col}} := stringr::str_c(.data[[col_1]], "_", .data[[col_2]]))