11

Rで次のプロセスを高速化する方法はありますか?

theFiles <- list.files(path="./lca_rs75_summary_logs", full.names=TRUE, pattern="*.summarylog")

listOfDataFrames <- NULL
masterDataFrame <- NULL

for (i in 1:length(theFiles)) {
    tempDataFrame <- read.csv(theFiles[i], sep="\t", header=TRUE)
    #Dropping some unnecessary row
    toBeRemoved <- which(tempDataFrame$Name == "")
    tempDataFrame <- tempDataFrame[-toBeRemoved,]
    #Now stack the data frame on the master data frame
    masterDataFrame <- rbind(masterDataFrame, tempDataFrame)
}

基本的に、ディレクトリ内の複数の csv ファイルを読み込んでいます。行を積み重ねて、すべての csv ファイルを 1 つの巨大なデータ フレームに結合したいと考えています。masterDataFrame のサイズが大きくなるにつれて、ループの実行時間が長くなるようです。Linuxクラスターでこれを行っています。

4

1 に答える 1

13

で回答を更新しましたdata.table::fread

require(data.table)
out = rbindlist(lapply(theFiles, function(file) {
         dt = fread(file)
         # further processing/filtering
      }))

fread()ヘッダー、ファイル区切り、列クラスを自動的に検出し、デフォルトでは文字列を要素に変換しません..埋め込まれた引用符を処理し、非常に高速です..詳細については、を参照?freadしてください.


古い回答については履歴を参照してください。

于 2013-04-11T22:55:28.747 に答える