![](/img/trans.png)
[英]R: passing by parameter to function and using apply instead of nested loop and recursive indexing failed
[英]recursive loop using apply R
我有兩個循環,我想使用一些Apply函數進行轉換,以減少計算時間。 第一個似乎很容易做到,第二個問題就出現了,因為S在每次迭代中都用自己的值進行更新。
S0 = 100
a = 0.00016
b = 0.0126
sim = 10000
drifts = 1000
Si = rep(0,sim)
for(i in (1:sim))
{
S = S0
for (j in (1:drifts))
{
z = rnorm(1, mean = 0, sd = 1)
S = S * exp(a + b*z)
}
Si[i] =S
}
有人可以幫忙嗎?
calc_s <- function(S, i = 1) {
S <- S * exp(a + b * rnorm(1, mean = 0, sd = 1))
return (if (i < drifts) calc_s(S, i + 1) else S)}
S2 <- sapply(1:sim, function(x) {
calc_s(S0)
})
雖然不快
下面的代碼怎么樣? 我已經用產品替換了j循環,我認為數學是正確的。
sapply(1:sim,function(x) S0*prod(exp(a + b*rnorm(drifts))))
它也明顯更快:
> system.time(for(i in (1:sim))
+ {
+ S = S0
+ for (j in (1:drifts))
+ {
+ z = rnorm(1, mean = 0, sd = 1)
+ S = S * exp(a + b*z)
+ }
+ Si[i] =S
+ }
+ )
user system elapsed
23.29 0.02 23.34
>
> system.time(Si<-sapply(1:sim,function(x) S0*prod(exp(a + b*rnorm(drifts)))))
user system elapsed
1.76 0.00 1.76
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.