記号を含む列名の選択には爆竹を使う

こういうデータフレームがあるとする。

> (smp <- data.frame(`hoge(hage)`=1, fuga=2, check.names=FALSE))
  hoge(hage) fuga
1          1    2

read.csv等を使ってデータを読み込んで、check.names=FALSEなどにしていない限り、列名の()などは.に変換される。
しかし、data.tableパッケージのfread関数を使って読み込むと、デフォルトでは()などを.に変換しない。
このようなdata.frameに対して、dplyrでselectをかけたりすると関数と勘違いしてエラーがでる。

> library(dplyr)
> smp %>% select(hoge(hage))
 Error in eval(expr, envir, enclos) : could not find function "hoge"

ここで列名を変換せずにselectをかけたいときはどうするか。
そんな時は`(バックティック)を使う。

> smp %>% select(`hoge(hage)`)
  hoge(hage)
1          1

文字列で選択したいときは`で囲んだ上で文字列とする。

> smp %>% select_("`hoge(hage)`")
  hoge(hage)
1          1

別にdplyrに限った話ではないのだが一応メモして残しておく。