Более быстрая альтернатива функции ‘rollapply’

#r #dplyr #quantmod #rolling-computation #rollapply

#r #xts #зоопарк #анализ производительности #rollapply

Вопрос:

Мне нужно запустить функцию скользящего окна для данных xts, которые содержат около 7000 строк и 11 000 столбцов. Я сделал следующее:

 require(PerformanceAnalytics)
ssd60<-rollapply(wddxts,width=60,FUN=function(x) SemiDeviation(x),by.column=TRUE)
  

Я ждал до 12 часов, но вычисление не завершилось. Однако, когда я попытался с небольшим набором данных следующим образом:

 sample<-wddxts[,1:5]
ssd60<-rollapply(sample,width=60,FUN=function(x) SemiDeviation(x),by.column=TRUE)
  

вычисление было выполнено в течение 60 секунд. Я запускал их на компьютере с процессором Intel i5-2450M, ОС Windows 7 и 12 ГБ оперативной памяти.

Может кто-нибудь, пожалуйста, подсказать мне, есть ли какой-либо более быстрый способ выполнить вышеуказанные вычисления для большого набора данных xts?

Комментарии:

1. Попробуйте пакет RcppRoll

2. Спасибо, Дэвид, я посмотрю.

Ответ №1:

Если вы можете, преобразуйте их в объекты зоопарка. rollapply.zoo является более эффективным, чем rollapply.xts (в данном случае. Я не уверен, что в целом более эффективно):

 R> require(PerformanceAnalytics)
R> set.seed(21)
R> x <- .xts(rnorm(7000,0,0.01), 1:7000)
R> system.time({
    r <- rollapply(x, 60, SemiDeviation, by.column=TRUE, fill=NA)
  })
   user  system elapsed 
  9.936   0.111  10.075 
R> system.time({
    z <- rollapplyr(as.zoo(x), 60, SemiDeviation, by.column=TRUE, fill=NA)
  })
   user  system elapsed 
  1.950   0.010   1.964 
  

Комментарии:

1. Спасибо Джошуа, это заняло около 4,5 часов.