2012-03-02 55 views
3

此問題是Count days per year的後續操作。使此過程更加強化處理器和減少內存密集度

我做了什麼Dirk建議與一個巨大的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 GB Ram和2 GB交換空間。與此同時,我的處理器無聊,處理器負載可能爲15%。

此外,我的電腦需要很長時間來實現我的「慾望」。 我可以將一些工作轉移到CPU上,並卸下我的Ram嗎?

回答

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)