#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?
Комментарии:
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 часов.