R:如何在没有for循环的情况下计算回归系数 set.seed(1) n
R有一个向量化的R:如何在没有for循环的情况下计算回归系数 set.seed(1) n,r,for-loop,R,For Loop,R有一个向量化的cummax函数,除法和加法运算也是向量化的,因此您可以执行以下操作: set.seed(1) n <- 100 ret <- rnorm(n, 0, 0.02) ret[1] <- 0 price <- cumprod(1+ret)*100 maxi <- 0 drawdown <- rep(0, n) for (i in 1 : n){ maxi <- max(price[1 : i]) drawdown[i] &l
cummax
函数,除法和加法运算也是向量化的,因此您可以执行以下操作:
set.seed(1)
n <- 100
ret <- rnorm(n, 0, 0.02)
ret[1] <- 0
price <- cumprod(1+ret)*100
maxi <- 0
drawdown <- rep(0, n)
for (i in 1 : n){
maxi <- max(price[1 : i])
drawdown[i] <- price[i] / maxi - 1
}
比较n时的效率
price/cummax(price) - 1
library(microbenchmark)
microbenchmark(
OP= {
drawdown <- rep(0, n)
for (i in 1 : n){
maxi <- max(price[1 : i])
drawdown[i] <- price[i] / maxi - 1
}
},
me={
drawdown2 <- price/cummax(price) - 1
}, times=10)
# Unit: microseconds
# expr min lq mean median uq max neval
# OP 456216.519 483387.361 536067.7521 550912.471 565453.555 663352.635 10
# me 98.075 102.067 107.5978 105.203 112.331 127.726 10
identical(drawdown, drawdown2)
# [1] TRUE