2012-03-02 1 views
3

Этот вопрос является продолжением Count days per year.Сделайте этот процесс более интенсивным и интенсивным в работе процессора

Я сделал то, что предложил Дирк с огромным 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-гигабайтное пространство памяти RAM и 2 ГБ. Тем временем мой процессор скучает, имея нагрузку процессора, возможно, 15%.

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

ответ

2

Действительно, упомянутое решение является незащищенной голодной памятью. Попробуйте следующее:

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) 
Смежные вопросы