Re: [R] How do I make this faster?

From: Andreas Borg <andreas.borg_at_unimedizin-mainz.de>
Date: Mon, 11 Apr 2011 10:28:55 +0200

Hi Hasan,

I'd be happy to help you, but I am not able to run your code. You use commandArgs to retrieve arguments of the R program, but which ones do you actually provide?

Best regards,

Andreas

Hasan Diwan schrieb:
> 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]))
>
>
>

-- 
Andreas Borg
Medizinische Informatik

UNIVERSITÄTSMEDIZIN
der Johannes Gutenberg-Universität
Institut für Medizinische Biometrie, Epidemiologie und Informatik
Obere Zahlbacher Straße 69, 55131 Mainz
www.imbei.uni-mainz.de

Telefon +49 (0) 6131 175062
E-Mail: borg_at_imbei.uni-mainz.de

Diese E-Mail enthält vertrauliche und/oder rechtlich geschützte Informationen. Wenn Sie nicht der
richtige Adressat sind oder diese E-Mail irrtümlich erhalten haben, informieren Sie bitte sofort den
Absender und löschen Sie diese Mail. Das unerlaubte Kopieren sowie die unbefugte Weitergabe
dieser Mail und der darin enthaltenen Informationen ist nicht gestattet.

______________________________________________
R-help_at_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.
Received on Mon 11 Apr 2011 - 08:32:58 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 - 09:20: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