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 文件组合成一个巨大的数据框。随着 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 回答