[R] How do I make this faster?

From: Hasan Diwan <hasan.diwan_at_gmail.com>
Date: Sat, 09 Apr 2011 09:49:52 +0200

I was on vacation the last week and wrote some code to run a 500-day correlation between the Nasdaq tracking stock (QQQ) and 191 currency pairs for 500 days. The initial run took 9 hours(!) and I'd like to make it faster. So, I'm including my code below, in hopes that somebody will be able to figure out how to make it faster, either through parallelisation, or by making changes. I've marked the places where Rprof showed me it was slowing down:
currencyCorrelation <- function(lagtime = 1) {   require(quantmod)

  dataTrack <- getSymbols(commandArgs(trailingOnly=T)[1], from='2009-11-21', to='2011-04-03')
  stockData <- get(dataTrack)
  currencies <- row.names(oanda.currencies[grep(pattern='oz.', fixed=T, x =as.vector(oanda.currencies$oanda.df.1.length.oanda.df...2....1.)) == F])   correlations <- vector()
  values <- list()
# optimise these loops using the apply family
  for (i in currencies) {
    for (j in currencies) {

      if (i == j) next()
      fx <- getFX(paste(i, j, sep='/'), from='2009-11-20', to='2011-04-02')
      # Prepare data by getting rates for market days only
      fx <- get(fx)
      fx <- fx[which(index(fx) %in% index(QQQ$QQQ.Close))]
      correlation <- cor(fx, QQQ$QQQ.Close)
      correlations <- c(correlations, correlation)
      string <- paste(paste(i,j,sep='/'), correlation, sep=',')
      values <- c(values,paste(string,'\n', sep=''))
# TODO eliminate NA's

  values <- values[which(correlations[is.na(correlations) == F])]   correlations <- correlations[is.na(correlations) == F]   values <- values[order(correlations, decreasing=T)]   write.table(values, file=commandArgs(trailingOnly=T)[2], sep='', qmethod=NULL, quote = F, row.names=F, col.names=F)   rm('currencies', 'correlations', 'values', 'fx', 'string')   return()
lagtime <- as.integer(commandArgs(trailingOnly=T)[3]) if (is.na(lagtime)) lagtime <- 1
print(paste(Sys.time(), '<--- starting', lagtime, 'day lag currencies correlation with', commandArgs(trailingOnly=T)[1], 'from 2009-11-20 to 2011-04-03'))
print(paste(Sys.time(), '<--- ended, results in', commandArgs(trailingOnly=T)[2]))
Sent from my mobile device
Envoyait de mon telephone mobil

	[[alternative HTML version deleted]]

R-help_at_r-project.org mailing list
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Received on Sat 09 Apr 2011 - 10:32:46 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Mon 11 Apr 2011 - 08:50:28 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.

list of date sections of archive