数百Mのcsvデータをread.csvで読み込もうとすると、時間がかかるしメモリ不足になることも多いです。
だいたい読み込みデータの6,7倍のメモリを食います。
そのためcsvデータの一部だけを抜き出して読み込む関数を作りました。
SampleData <- function(UseData, Nskip, Nsample){ Name <- scan(UseData, sep = ",", nlines = 1, what = "raw") data1 <- scan(UseData, sep = ",", skip = Nskip, nlines = Nsample, what = "raw") data2 <- matrix(data1, ncol = length(Name), byrow = T) colnames(data2) <- Name data.frame(data2) } Test <- SampleData("Test.csv", 101, 10)
このSampleData関数では、指定したパスのcsvデータから一部だけを読み込みます。
Nskip番目の行からNsample数の観測値だけが読み込みます。
csvデータは1行目に変数名が記載されているとします。
この例では101番目から10行読み込んでおり、1行目が変数名なので100〜109の観測値が読み込まれます。
SampleDataで一応データフレームにはなりますが、listになったりしているので適宜do.callなどで加工してください。
元のデータが大きいと、読み込む観測値の数が少なくてもそれなりの時間がかかってしまいます。
また、とびとびの観測値を読み込めるようにはなってないので、ランダムサンプリングする為には使い方を考える必要がありそうです。
SQLでデータを作る時点からいろいろ考えてないといけないかもしれないですね。