dplyrでdata.tableがdata.frameに変換されてしまう件
こういう話がある。
datatableどうしをinner_joinしたらdataframeになって爆死したんだけど, なんでかなこれ
— はたむ (@gg_hatano) 2014, 6月 23
確かめてみる。
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"