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')) currencyCorrelation(lagtime) 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@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.