I have a piece of code as the one at the bottom, unfortunately since it
involves time series from a db it's not easy to give to mailing list a working
script.
It becomes very slow after few hundred iterations over variable sp (must
process several thousands).
The Rprof() indicates that the problem is the use of gc(). Can someone indicate
what I have to take care of not to call gc() so often?
Thanks in advance
-----
toProcess <- unique(tsr$cSpillingPointID)
first <- 1
for(sp in toProcess)
{
tsrSUB <- tsr[tsr$cSpillingPointID == sp,]
dmnd <- tsrSUB[is.na(tsrSUB$cDeviceClass),]
if(nrow(dmnd) != 1)
warning(paste("cSpillingPointID", sp, "has more than one demand time
Series. Used first."))
tsrValCount <- getTimeSeries(chn,
tsrSUB[!is.na(tsrSUB$cDeviceClass),]$cTimeSeriesID, nDaysBack = 366*nyears)
tsrValDmnd <- getTimeSeries(chn, dmnd$cTimeSeriesID[1], nDaysBack =
366*nyears)
sequence <- timeSequence(from = format(start(tsrValDmnd), '%Y-%m-%d'), to =
format(end(tsrValDmnd), '%Y-%m-%d'), by = 'day')
if(format(start(tsrValDmnd), '%H') != '00')
tsrValDmnd <- window(tsrValDmnd, sequence[3], end(tsrValDmnd))
if(format(end(tsrValDmnd), '%H') != '23')
tsrValDmnd <- window(tsrValDmnd, start(tsrValDmnd),
sequence[length(sequence)-2])
sequence <- sequence - 3600
tsrValDmnd <- aggregate(tsrValDmnd, by = sequence, sum)
sequence <- seriesPositions(tsrValDmnd)
newPositions(tsrValDmnd) <- sequence - 23*3600
#head(tsrValDmnd2)
#sum(head(tsrValDmnd, 24))
tsrValSub <- cbind(tsrValDmnd, tsrValCount)
tsrValSub <- na.omit(tsrValSub)
head(tsrValSub)
if(nrow(tsrValSub) > 1)
{
dif <- na.omit(tsrValSub[,-1] -lag(tsrValSub[,-1],1))
head(dif)
costant <- is.costant(dif)
if(any(costant == FALSE))
{
a <- (dif != 0) *1:nrow(dif)
a <- seriesPositions(dif[abs(a[a!=0]),])
from <- min(a) - ndays *24*60*60
to <- max(a) + ndays *24*60*60
tsrValSub <- window(tsrValSub, from, to)
} else
{
if(nrow(tsrValSub) > ndays) tsrValSub <- sample(tsrValSub, ndays)
}
if(nrow(tsrValSub) > 1)
{
row.names(tsrSUB) <- tsrSUB$cTimeSeriesID
if(any(is.na(tsrSUB$cDeviceClass)))
tsrSUB[is.na(tsrSUB$cDeviceClass),]$cDeviceClass <- 'DMND'
tsrval...@units <- tsrsub[tsrval...@units,]$cDeviceClass
if(first == 1)
dat <- data.frame(cSpillingPointID = sp,
year = format(seriesPositions(tsrValSub), '%Y'),
month = format(seriesPositions(tsrValSub), '%m'),
day = format(seriesPositions(tsrValSub), '%d'),
tsrValSub,
stringsAsFactors = F)
else
dat <- merge(dat,
data.frame(cSpillingPointID = sp,
year = format(seriesPositions(tsrValSub), '%Y'),
month = format(seriesPositions(tsrValSub), '%m'),
day = format(seriesPositions(tsrValSub), '%d'),
tsrValSub,
stringsAsFactors = F),
all.x = T, all.y = T)
cat(paste('Added', nrow(tsrValSub), 'rows.\n'))
cat(paste('...', round(first/length(toProcess)*100, 2), '%...\n'))
}
}
else cat(paste('...', round(first/length(toProcess)*100, 2), '%...\n'))
if(any(first %in% seq(100, length(toProcess), 250) )) gc()
first <- first +1
}
----
ORS Srl
Via Agostino Morando 1/3 12060 Roddi (Cn) - Italy
Tel. +39 0173 620211
Fax. +39 0173 620299 / +39 0173 433111
Web Site www.ors.it
------------------------------------------------------------------------------------------------------------------------
Qualsiasi utilizzo non autorizzato del presente messaggio e dei suoi allegati ?
vietato e potrebbe costituire reato.
Se lei avesse ricevuto erroneamente questo messaggio, Le saremmo grati se
provvedesse alla distruzione dello stesso
e degli eventuali allegati.
Opinioni, conclusioni o altre informazioni riportate nella e-mail, che non
siano relative alle attivit? e/o
alla missione aziendale di O.R.S. Srl si intendono non attribuibili alla
societ? stessa, n? la impegnano in alcun modo.
______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.