[R] How do I make this faster?
Andreas Borg
andreas.borg at unimedizin-mainz.de
Mon Apr 11 10:28:55 CEST 2011
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.
More information about the R-help
mailing list