Загрузка нескольких файлов в R> 2 ГБ - PullRequest
2 голосов
/ 15 марта 2019

Я пытался загрузить много файлов в R, используя несколько различных методов, которые работали со мной в прошлом, но по некоторым причинам здесь нет. Я прочитал много постов на форуме, в которых рассматриваются различные способы, которыми это можно сделать, но ни один из них, похоже, не подходит для моей проблемы; Полагаю, файлы больше.

Вот разные вещи, которые я пробовал:

files <- list.files(pattern = ".txt")

listOfFiles <- list()

for(i in 1:length(files)){
 listOfFiles[[i]] <- read.table(files[i], header = TRUE, sep = "\t", stringsAsFactors = FALSE)
}

Однако, когда я запускаю это, мой компьютер просто зависает и перестает работать. Это заставило меня поверить, что это может быть проблема с памятью, однако я попытался изменить memory.limit() до 12000, и он все еще не работает.

Здесь есть сообщение, что вроде решает данную проблему: Быстрое чтение очень больших таблиц в виде фреймов данных . Причины, по которым он отличается, в том, что я знаю , что загруженные мной скрипты работают, но не над многими файлами, общим объемом более 2 ГБ. Я считаю, что это проблема памяти, потому что, когда я запустил его снова, я получил ошибку:

Error: cannot allocate vector of size 7.8 Mb 

Я читал другие посты на форуме, которые используют lapply, поэтому подумал, что попробую, однако, он также не работает.

Вот что я сделал:

listo <- lapply(files, read.table)

Это, с другой стороны, работает, но когда я пытаюсь открыть список listo, выдает ошибку:

Error: object 'listo' not found

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 18 марта 2019

Спасибо @TinglTanglBob за помощь в решении этого вопроса.

Вот как я это решил:

memory.limit(size = 12000)
files <- list.files(pattern = ".txt")
YFV_list <- list()

for(i in 1:length(files)){
  YFV_list[[i]] <- fread(files[i], sep = "\t", header = TRUE, stringsAsFactors = FALSE)
}

Итак, я при условии, что была проблема с памятью. Использование fread из пакета Data.table помогло решить эту проблему, так как ранее она не работала с read.table. Тем не менее, необходимо внести некоторые изменения в memory.limit, чтобы это работало независимо.

...