我有一个xts系列,其中包含250个观测值和584列。我正在本系列上运行一个嵌套的for循环。此嵌套循环需要太多时间。我试图创建一个可复制的示例。在实际数据集上,嵌套循环会花费太多时间。请提出一些有效的方法来执行相同的嵌套循环
library(PerformanceAnalytics)
library(xts)
library(zoo)
## dataset
bsereturn<-managers
##### calculating bse_lag
bse_lag<-head(bsereturn,-1)
## calculating bse forward
bse_forward<-tail(bsereturn,-1)
## defining look back and skip period
s=12
k=1
## Empty xts to store looping results
XSMOM = bse_lag
XSMOM[1:nrow(XSMOM),1:ncol(XSMOM)] <- NA
# Compute Momentum
system.time(for (i in 1:ncol(bse_lag)){
for (t in (s + 1):nrow(bse_lag)){
XSMOM[t,i] = Return.cumulative(bse_lag[(t-s):(t-1-k),i])
}
})
您的示例中的结果对我来说很奇怪。您对1997-01-31的收益是1996-01-31到1996-11-30的累积收益。为什么您不理会1996-12-31的收益?
无论如何,您都会使用它rollapply
来获得答案。对于我来说,您的示例运行的速度比Jerome答案中的单循环快4倍。
# this is what I would do
xsmom <- lag(rollapplyr(1 + bsereturn, 11, prod) - 1)
# this is what you have (lagged 2 periods)
xsmom2 <- lag(rollapplyr(1 + bsereturn, 11, prod) - 1, 2)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句