メモリに乗らないデータを分割して読み込んでくれるパッケージ
最近readrパッケージが1.0になった。
https://blog.rstudio.org/2016/08/05/readr-1-0-0/
この中で「実験的だが」という断りつきでread_csv_chunked関数が最後に紹介されている。
メモリに乗らないようなデータを分割して読み込むことができる。
baseのread.**関数群も読み込み行数および読み込み開始位置は指定できたので、今までできなかったというわけではないが、1回の読み込みデータ数を指定すればあとはfor文を書かずともよしなにやってくれるので楽ではある。
しかも毎回の読み込み時に呼び出されるコールバック関数も指定できる。
以下は毎回20ずつデータを読み込み、そのたびにstr関数を呼ぶ例。
library("readr") read_csv_chunked(file=readr_example("mtcars.csv"), callback=str, chunk_size = 20)
chunkedパッケージの方が便利かも
そういえばこういうコンセプトのパッケージ、UseR!2016で話題になっておりRワカラングでも盛り上がっていた憶えがある。
盛り上がっていたことしか覚えていなくて難儀したが、chunkedパッケージというのがそれ。
(レポジトリ)
https://github.com/edwindj/chunked
(UseRの発表資料)
https://github.com/edwindj/chunked/blob/master/useR2016/lightning.pdf
LaFパッケージを内部的に利用しつつ、dplyrの思想に合うように作られている。
以下は公式のヘルプを転載したもの。
library("chunked") read_chunkwise("./large_file_in.csv", chunk_size=5000) %>% select(col1, col2, col5) %>% filter(col1 > 10) %>% mutate(col6 = col1 + col2) %>% write_chunkwise("./large_file_out.csv")
最近忘れっぽい&Rワカラングだとすぐ流れてしまう、のでメモしておく。
誰か解説書いてください。