【发布时间】:2023-03-09 15:04:01
【问题描述】:
我有 1500 万个 CSV 文件,每个文件有两列(整数和浮点数),行数介于 5 到 500 行之间。每个文件看起来像:
3453,0.034
31,0.031
567,0.456
...
目前,我正在遍历所有文件,并使用read.csv() 将每个文件导入到一个大列表中。这是一个简化的版本:
allFileNames = Sys.glob(sprintf("%s/*/*/results/*/*", dir))
s$scores = list()
for (i in 1:length(allFileNames)){
if ((i %% 1000) == 0){
cat(sprintf("%d of %d\n", i, length(allFileNames)))
}
fileName = allFileNames[i]
approachID = getApproachID(fileName)
bugID = getBugID(fileName)
size = file.info(fileName)$size
if (!is.na(size) && size > 0){ # make sure file exists and is not empty
tmp = read.csv(fileName, header=F, colClasses=c("integer", "numeric"))
colnames(tmp) = c("fileCode", "score")
s$scores[[approachID]][[bugID]] = tmp
} else {
# File does not exist, or is empty.
s$scores[[approachID]][[bugID]] = matrix(-1, ncol=2, nrow=1)
}
}
tmp = read.csv(fileName, header=F, colClasses=c("integer", "numeric")
稍后在我的代码中,我会返回列表中的每个矩阵,并计算一些指标。
开始此导入过程后,似乎需要大约 3 到 5 天才能完成。有没有更快的方法来做到这一点?
编辑:我添加了有关我的代码的更多详细信息。
【问题讨论】:
-
你想做什么?用所有数据建立一个矩阵,还是分别读入和处理每个矩阵?
-
这与一次加载多个文件有关:stackoverflow.com/questions/3764292
-
@joran 我不知道这是否是一个重复的问题,确切地说,尽管那里的许多答案在这里肯定会有用。
-
@joran:不完全是骗子,因为这涉及很多文件,但 OP 应该明确检查链接。