今回はSpringerから出ている『Genome-Wide Association Studies and Genomic Prediction』という本からデータの読み込みについて記述する。
GWASなどのゲノムデータは非常に膨大であり、読み込みだけでもかなりの時間を要する。そこで下記のTipsで幾分改善されることがあるので、紹介する。
ここで使用するのは、本書のExtra dataでsquare.txtという1,000 samples(つまり1000人)×50,000 SNPsのデータを読みこむことにする。
1 まずは普通に読み込む
mydata = read.table("square.txt", sep="\t")
結果は38秒ほどかかっている
## user system elapsed ## 37.960 0.497 38.503
2 scan関数を利用する
ここで、genotype dataとphenotype dataが分割されていることを考える。実はこのように別々に読み込むことでスピードは格段に向上する。
今回は、genotypeだけgenotypes.txtに格納されていることを想定する。
mydata = matrix(scan(file="genotypes.txt", what=integer(), sep="\t"), 50000, 1000, byrow=T)
先ほどの1/3程度(11.2秒)まで読み込み速度が向上。
## user system elapsed ## 10.806 0.396 11.249
3 readLines関数を利用する
mydata = readLines(con="genotypes.txt")
さらに3秒ほどの短縮につながっている。ただし、この関数では、これまでの関数とは異なりマトリックス構造ではないという短所を持つ。
## user system elapsed ## 8.076 0.048 8.163
4. readChar関数を利用する
mydata = readChar(con="genotypes.txt", nchars=file.info("genotypes.txt")$size, useBytes=T)
格段に読み込み速度は速い(0.2秒)ことがわかる。一方で、構造の変化をする必要があり、総合的に見るとread.tableよりも遅くなる可能性もある。
## user system elapsed ## 0.218 0.053 0.272
この程度のデータセットであれば、数十秒の差であるが、さらに大きなデータになれば、このTipsがさらに役に立つ可能性が高い。
20161226
RF