以下循环需要花费大量时间才能运行。如果我对内线进行评论,它会很快运行。 prices
是3224x40
矩阵。
get_returns <- function(prices, type=1) {
returns = prices
returns2 = prices
returns[,] = 0
M = dim(prices)[1]
N = dim(prices)[2]
for (i in 2:M) {
for (j in 1:N) {
returns[i,j] = prices[i,j]/prices[i-1,j] - 1 ## LINE 1
returns2[i,j] = prices[i,j]/prices[1,j] - 1 ## LINE 1
}
}
}
> dim(prices)
[1] 3224 40
>
> system.time(get_returns(prices,1))
user system elapsed
1213.95 1.12 1266.60
>
> # After commenting LINE 1
> system.time(get_returns(prices,1))
user system elapsed
0.67 0.00 0.75
>
差不多需要20分钟才能运行。我想知道为什么要花这么长时间才能运行,如果我可以做一些事情来优化它。我有其他循环运行得相当快,但这个特殊的循环是一个问题。
答案 0 :(得分:4)
答案 1 :(得分:0)
如果价格是data.frame
sapply(prices,diff)/prices[-nrow(prices_df),]
如果价格是矩阵
apply(prices,2,diff)/prices[-NROW(prices),]