dplyrでdata.tableがdata.frameに変換されてしまう件

こういう話がある。

確かめてみる。

dt1 <- data.table(A = letters[1:10], X = 1:10, key = "A")
dt2 <- data.table(A = letters[5:14], Y = 1:10, key = "A")
inner_join(dt1,dt2) %>% class()
Joining by: "A"
[1] "data.frame"

確かに変わっている。
dplyrはdata.tableはあくまでdata.frameとして扱っているのでこういうことが起こる。
実装をみると、DataFrameとして受け取ってDataFrameで返すようにしているのがわかる。
https://github.com/hadley/dplyr/blob/c4b6126629d521b21751bbfd32bebd1a2d493560/src/RcppExports.cpp#L180

ということでdata.tableとして扱っていきたい時はdata.tableの関数を使った方がいい。餅は餅屋。
この場合はmerge。

merge(dt1, dt2) %>% class()
[1] "data.table" "data.frame"