<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><br class=""><div><br class=""><blockquote type="cite" class=""><div class="">Wiadomość napisana przez Vladimir Morozov <<a href="mailto:vmorozov2006@gmail.com" class="">vmorozov2006@gmail.com</a>> w dniu 06.09.2019, o godz. 04:51:</div><br class="Apple-interchange-newline"><div class=""><div class="">Dear xts experts<br class=""><br class="">I use R and XTS to store dynamically growing price time-series for currency<br class="">pair rates (e.g. time series of EUR/USD, EUR/JPY, etc growing with each new<br class="">incoming market price - say, one per second).<br class=""><br class=""><br class=""></div></div></blockquote><div><br class=""></div><div>(…)</div><br class=""><blockquote type="cite" class=""><div class=""><div class="">it all happens quite slowly in R. How do I accelerate it?<br class=""></div></div></blockquote></div><br class=""><div class=""><br class=""></div><div class="">1) forgotten xts acceleration:</div><div class=""><br class=""></div><div class=""><a href="https://github.com/joshuaulrich/xts/blob/master/src/rbind.c#L540" class="">https://github.com/joshuaulrich/xts/blob/master/src/rbind.c#L540</a></div><div class=""><br class=""></div><div class="">to activate it add the -DRBIND_APPEND flag to Makevars (linux/unix/macos) or <a href="http://Makevars.win" class="">Makevars.win</a> (Windows), and recompile xts sources.</div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">2) preallocation</div><div class=""><br class=""></div><div class="">preallocate_matrix <- function(n)</div><div class="">{</div><div class="">    x <- matrix()</div><div class="">    length(x) <- 4 * n      # bid, ask, bid_size, ask_size</div><div class="">    dim(x) <- c(n, 4)       # see: ?dim</div><div class="">    return(x)</div><div class="">}</div><div class=""><br class=""></div><div class=""><div class="">> x <- preallocate_matrix(5)</div><div class="">> x</div><div class="">     [,1] [,2] [,3] [,4]</div><div class="">[1,]   NA   NA   NA   NA</div><div class="">[2,]   NA   NA   NA   NA</div><div class="">[3,]   NA   NA   NA   NA</div><div class="">[4,]   NA   NA   NA   NA</div><div class="">[5,]   NA   NA   NA   NA</div></div><div class=""><br class=""></div><div class="">Now you need xts index, eg:</div><div class=""><br class=""></div><div class=""><div class="">i <- Sys.time() + 1:5</div><div class="">> i</div><div class="">[1] "2019-09-06 15:47:48 CEST" "2019-09-06 15:47:49 CEST" "2019-09-06 15:47:50 CEST" "2019-09-06 15:47:51 CEST"</div><div class="">[5] "2019-09-06 15:47:52 CEST”</div></div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">Our xts object:</div><div class=""><br class=""></div><div class=""><div class="">> x <- .xts(x, index = i)</div><div class="">                    [,1] [,2] [,3] [,4]</div><div class="">2019-09-06 15:47:48   NA   NA   NA   NA</div><div class="">2019-09-06 15:47:49   NA   NA   NA   NA</div><div class="">2019-09-06 15:47:50   NA   NA   NA   NA</div><div class="">2019-09-06 15:47:51   NA   NA   NA   NA</div><div class="">2019-09-06 15:47:52   NA   NA   NA   NA</div></div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">And now you can use this xts object without memory copying:</div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><div class="">> x[1,] <- c(1, 2, 3, 4)</div><div class="">> x</div><div class="">                    [,1] [,2] [,3] [,4]</div><div class="">2019-09-06 15:47:48    1    2    3    4</div><div class="">2019-09-06 15:47:49   NA   NA   NA   NA</div><div class="">2019-09-06 15:47:50   NA   NA   NA   NA</div><div class="">2019-09-06 15:47:51   NA   NA   NA   NA</div><div class="">2019-09-06 15:47:52   NA   NA   NA   NA</div></div><div class=""><br class=""></div><div class=""><div class="">> x[2,] <- c(11, 22, 33, 44)</div><div class="">> x</div><div class="">                    [,1] [,2] [,3] [,4]</div><div class="">2019-09-06 15:47:48    1    2    3    4</div><div class="">2019-09-06 15:47:49   11   22   33   44</div><div class="">2019-09-06 15:47:50   NA   NA   NA   NA</div><div class="">2019-09-06 15:47:51   NA   NA   NA   NA</div><div class="">2019-09-06 15:47:52   NA   NA   NA   NA</div></div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">etc.</div><div class=""><br class=""></div><div class="">That's what you meant.</div><div class=""><br class=""></div><div class="">Best,</div><div class="">Daniel</div><div class=""><br class=""></div></body></html>