Я использую RStudio в Windows 7, и у меня проблема с выпуском памяти в ОС. Ниже мой код. В цикле for
:
- Я читаю данные через вызов API на веб-сайте Census.gov, и я использую пакет
acs
для сохранения их в файле.csv
через временный объектtable
. - Я удаляю
table
(обычный размер: несколько МБ), и я использую пакетpryr
для проверки использования памяти.
В соответствии с функцией mem_used()
, после удаления table
, R всегда возвращается к использованию постоянной памяти; вместо этого в соответствии с диспетчером задач Windows распределение памяти для rsession.exe(а не Rstudio) увеличивается на каждой итерации, и это в конечном итоге приводит к сбою rsession. Использование gc()
не помогает. Я читал много похожих вопросов, но кажется, что единственным решением для свободной памяти является перезапуск сеанса R, который кажется глупым.
Любое предложение?
library(acs)
library(pryr)
# for loop to extract tables from API and save them on API
for (i in 128:length(tablecodes)) {
tryCatch({table <- acs.fetch(table.number = tablecodes[i],endyear = 2014, span=5,
geography = geo.make(state = "NY", county = "*", tract = "*"),
key = "e24539dfe0e8a5c5bf99d78a2bb8138abaa3b851",col.names="pretty")},
error = function(e){print("Table skipped") })
# if the table is actually fetched then we save it
if (exists("table", mode="S4")) {
print(paste("Table",i,"fetched")
if (!is.na(table)){
write.csv(estimate(table),paste("./CENSUS_tables/NY/",tablecodes[i],".csv",sep = ""))
}
print(mem_used())
print(mem_change(rm(table)))
gc()
}
}