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.

______________________________________________
R-help@r-project.org 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.

Reply via email to