我有大约700K的小文件(神鹰日志文件少于10 KB)。文件名没有规则。我使用list.files获取所有文件名,然后使用readLines读取它们,并将它们合并为列表。
目前读取所有文件需要几个小时。这些是我读取日志文件的代码。
rm(list = ls())
base <- 'logs-025'
exts <- c('log', 'out', 'err')
for (i in seq(along = exts))
{
all_files <- list.files(base, paste0('apsim_.*.', exts[i]), full.names = TRUE)
res <- NULL
for (j in seq(along = all_files))
{
res_j <- readLines(all_files[j])
res[[j]] <- res_j
}
save(res, file = paste0(Sys.info()['nodename'], '-', exts[i], '.RData'))
}
是否有一种有效的方法来读取R中的大量小文件?
感谢您的任何建议。
干杯, 帮友
答案 0 :(得分:1)
根据数据集的总大小(即它是否适合内存),您可能希望对文件进行内存映射(例如使用ff package)
但总的来说,R的IO功能的性能很差,我建议在C
中编写这些循环