Как уже указывалось в комментариях, ваша проблема заключается в нехватке доступной памяти. Это может показаться вам неожиданным, поскольку у вас 8 ГБ ОЗУ. Однако для txt-файлов размером более 100 МБ этого может быть недостаточно, даже если вы не идете параллельно (что приводит к дополнительным затратам памяти).
У меня есть пример того, что я недавно попробовал. Поскольку данные, которые вы описываете, не доступны без учетной записи, это может иметь больше смысла, чтобы показать здесь:
library("data.table")
download.file(url = "http://download.geonames.org/export/dump/allCountries.zip",
destfile = "allCountries.zip",
mode = "wb",
cacheOK = FALSE,
extra = character())
unzip(zipfile = "allCountries.zip")
Эти первые несколько строк просто скачивают и разархивируют .txt с данными. Обратите внимание, что размер распакованного .txt
файла составляет 1,4 ГБ.
geonames <- fread("allCountries.txt",
quote = "",
sep = "\t",
col.names = c(
"geonameid",
"name",
"asciiname",
"alternatenames",
"latitude",
"longitude",
"feature class",
"feature code",
"country code",
"cc2",
"admin1 code",
"admin2 code",
"admin3 code",
"admin4 code",
"population",
"elevation",
"dem",
"timezone",
"modification date"
))
format(object.size(geonames), units = "GiB")
#> [1] "2.9 Gb"
Как вы можете видеть, размер файла увеличился более чем в два раза после того, как он был прочитан в R. Для чтения из четырех файлов размером 700 МБ вам потребуется 5,6 ГБ доступной оперативной памяти. В Windows это может быть проблемой, в зависимости от того, что еще работает в фоновом режиме. Вы можете подумать о том, чтобы прочитать файлы по одному, сохранить их как файлы .RDS, а затем объединить их вместе. Но это не изменит тот факт, что вы не можете открыть все данные в R одновременно.
Я бы посоветовал взглянуть на пакет dbplyr
и сохранить ваши данные, например, в базе данных SQLite. Чтобы пойти дальше, нужно прочитать файлы по одному и записать данные в базу данных. Таким образом, вы можете запросить данные, которые вам нужны, когда вам это нужно. Или получить больше оперативной памяти. Это также помогло бы.