3倍早いファイル読み込み

Rのread.table(というかread.delimが好みだけど)は結構遅い。
大量のファイルを処理する必要があって、改良してみた。
単に数値データであることを指定してるだけだが、効果てきめん。
でも、3倍ってのは言い過ぎか。。。

> system.time(m1 <- scan.file("test.txt"))
Read 100 items
[1] 5.522 0.124 5.655 0.000 0.000
> system.time(m2 <- read.delim("test.txt"))
[1] 10.495  0.138 10.606  0.000  0.000
> dim(m1)
[1] 10000   100
> all(m1 == m2)
[1] TRUE
> scan.file
function(file) {
  n <- length(scan(file, sep="\t", nlines=1, what="character"))
  res <- try(
      read.delim(file, header=T, colClasses=c("character", rep("double", n))))
  if (class(res) != "try-error") {
    res
  } else {
    read.delim(file, header=T)
  }
}