#r #large-files
Вопрос:
У меня есть большой набор данных, состоящий из нескольких файлов .csv. Каждый файл .csv занимает около 5-10 ГБ, что слишком много и отнимает много времени для оперативной памяти моего компьютера. Чтобы решить проблему, я подумал о создании фрагментов (скажем, Chunk = 1000), но при вставке его в мой код он повторяется только в первых 1000 строках. Вот пример кода:
# Trying to make a for loop iteration through multiple files
## Attempt - with CON. (Does not iterate for each chunk through the files)
library(tidyverse)
library(fs)
file_paths <- fs::dir_ls("path/to/folder")
file_contents <- list()
chunkSize = 1000
for(i in seq_along(file_paths)){
# Open a connection to file i in readable format
con = file(file_paths[[i]], "r")
# Assign to empty list, and read in data in chunks
file_contents[[i]] <- read.csv(con, nrows = chunkSize)
}
close(con)
# set name to each of the file paths
file_contents <- set_names(file_contents, file_paths)
Комментарии:
1. Вы читаете только первые 1000 строк каждого файла. Вам нужен внутренний цикл для чтения последующих фрагментов каждого файла, пока вы не дойдете до конца файла. Кроме того, вы
close(con)
, вероятно, должны быть внутри (внешнего) цикла.2. Вам это помогает? youtube.com/watch?v=9nHsfkYZSUA
3. Я не понимаю.
file_paths[i]
является одним элементом вектора. конечно, его длина равна 1. Что вы получаете отlength(file_paths)
этого ?