dplyrとPostgreSQLではまったポイント
dplyrをPostgreSQLから叩いてはまったポイントをつらつらと書きます。
%in%演算子はローカルに落としてから
dplyrからPostgreSQLを叩く時 filterで%in%演算子を使うと以下のようにescapeがどうたらこうたらと怒られます。
Error in UseMethod("escape") : no applicable method for 'escape' applied to an object of class "c('tbl_df', 'tbl', 'data.frame')"
一旦collect()などでローカルに落としてから%in%を使うという回避方法をとっています。
collectでクラッシュしたらas.data.frameで切り抜ける
1000万行くらいのデータにdplyrで集計をかけた後collectしてローカルに落とそうとすると、Rがクラッシュしました。
collectの段階でクラッシュしているようです。
collectをas.data.frameに替えるとクラッシュしないので、とりあえずこれでしのいでいます。
困ったらとりあえずSys.setlocale("LC_CTYPE", "C")
localeがJapanese_Japan.932な環境でdplyrを使うと以下のようなエラーが出る場合があります。
Error in nchar(values) : invalid multibyte string 12
Sys.setlocale("LC_CTYPE", "C")として用が済んだら元に戻すなどしてとりあえずしのいでいます。
as.data.frameではnに-1を指定する
dplyrで集計をかけた結果をデータフレームに変換しようとした際、デフォルトでは100万行を超えていると先頭100万行のみがデータフレームに変換されるという仕様があります。
回避策としてはdata_overmillion %.% as.data.frame(n = -1)といった形で引数nに-1を指定します。
以下のas.data.frame.tbl_sql参照のこと。
https://github.com/hadley/dplyr/blob/master/R/tbl-sql.r