Сделайте этот процесс более интенсивным для процессора и менее интенсивным для памяти.

Этот вопрос является продолжением вопроса Подсчет дней в году.

Я сделал то, что предложил Дирк, с огромным data.frame. Мои команды выглядят так:

dateSeq <- function(df) {
  res <- seq(as.Date(df["begin"]), as.Date(df["end"]), by = "1 day")
  format(res, "%Y")
}

dataFrame$seq <- apply(dataFrame, 1, dateSeq)
dataFrame_years <- do.call("c", dataFrame[["seq"]])

rm(dataFrame)
gc()
gc()

dataFrame_tab <- table(dataFrame_years)

Теперь эти команды заполняют мои 8 ГБ оперативной памяти и 2 ГБ пространства подкачки. В то же время мой процессор скучно с загрузкой процессора может быть 15%.

Кроме того, моему компьютеру требуется целая вечность, чтобы исполнить мои «желания». Могу ли я переложить часть работы на ЦП и немного разгрузить оперативную память?


person speendo    schedule 02.03.2012    source источник


Ответы (1)


Действительно, упомянутое решение требует ненужной памяти. Попробуй это:

begin <- as.POSIXlt("2007-05-20", tz = "GMT")
end <- as.POSIXlt("2010-06-13", tz = "GMT")

year <- seq(begin$year, end$year) + 1900
year.begin <- as.POSIXlt(paste(year, "01", "01", sep="-"), tz="GMT")
year.begin[1] <- begin
year.end <- as.POSIXlt(paste(year, "12", "31", sep="-"), tz="GMT")
year.end[length(year.end)] <- end
days <- as.numeric(year.end - year.begin) + 1
cbind(year, days)
person Andrei    schedule 02.03.2012