Tôi có 15 triệu tệp CSV, mỗi tệp có hai cột (số nguyên và dấu phẩy) và từ 5 đến 500 hàng. Mỗi tập tin trông giống như sau:Cách nhanh nhất để nhập hàng triệu tệp trong R?
3453,0.034
31,0.031
567,0.456
...
Hiện nay, tôi đang lặp lại trên tất cả các tập tin, và sử dụng read.csv()
nhập từng tệp vào một danh sách lớn. Đây là phiên bản được đơn giản hóa:
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")
Sau đó, tôi quay lại mỗi ma trận trong danh sách và tính một số chỉ số.
Sau khi bắt đầu quy trình nhập này, có vẻ như sẽ mất khoảng từ 3 đến 5 ngày để hoàn thành. Có cách nào nhanh hơn để thực hiện việc này không?
EDIT: Tôi đã thêm nhiều chi tiết hơn về mã của mình.
thể trùng lặp của [Nhanh chóng đọc bảng rất lớn như dataframes trong R] (http://stackoverflow.com/questions/1727772/quickly-reading-very-large-tables-as-dataframes-in-r) – joran
Bạn đang cố gắng làm gì? Xây dựng một ma trận đơn với tất cả dữ liệu, hoặc đọc và xử lý từng ma trận một cách riêng biệt? –
Điều này có liên quan đến việc tải nhiều tệp cùng một lúc: http://stackoverflow.com/questions/3764292/ – Ben