与直接处理向量的代码相比,R for 循环的运行速度较慢。
你给出的这个过程可以向量化如下:
为 nw.bank 获取一些随机值,以便演示计算:
nw.bank<- 200*runif(20)-100
[1] 43.273799 19.051499 37.552510 76.940632 -59.176684 -27.379326
[7] -37.512520 77.776610 88.127792 -91.213580 -50.691943 78.697820
[13] 36.933503 -76.973450 28.143336 -55.136574 -70.693362 -14.213375
[19] 15.666707 -3.072321
请注意,向量化的 AND 中只有一个与号 (&)
as.numeric(((-50<nw.bank) & (50>nw.bank)))
[1] 1 1 1 0 0 1 1 0 0 0 0 0 1 0 1 0 0 1 1 1
现在乘以 0.001 并取累积和
cumsum(0.001*as.numeric(((-50<nw.bank) & (50>nw.bank))))
[1] 0.001 0.002 0.003 0.003 0.003 0.004 0.005 0.005 0.005 0.005 0.005 0.005
[13] 0.006 0.006 0.007 0.007 0.007 0.008 0.009 0.010
现在你可能需要一个可调整的初始值,你就完成了
rlinit <- 3.0;
rl <- cumsum(0.001*as.numeric(((-50<nw.bank) & (50>nw.bank)))) + rlinit
[1] 3.001 3.002 3.003 3.003 3.003 3.004 3.005 3.005 3.005 3.005 3.005 3.005
[13] 3.006 3.006 3.007 3.007 3.007 3.008 3.009 3.010