[英]R - multiple nested loops
我試圖編寫一個嵌套循環代碼來模擬101行數據框中的10列數據。 第一行數據已被指定為起始值。 每列應該是不同的,因為我的矩陣r是從隨機法線生成的; 但是,每列中的結果值完全相同。 為循環索引提供一些上下文:
tmax=100; ncol(pop_sims) = 12 (so a total of 10 iterations, 3-12); ncol(r) = 10
for (i in 1:tmax){
for (j in 3:ncol(pop_sims)){
for(k in 1:ncol(r)){
if (pop_sims[i,j]*exp(r[i,k]) <2) {
pop_sims[i+1,j]<- 0}
else {
pop_sims[i+1,j] <- pop_sims[i,j]*exp(r[i,k])}
}}}
任何想法將不勝感激。
更新:我沒有使用多個循環,而是省略了矩陣r的使用並簡化了我的循環。
for (i in 1:tmax){
for (j in 1:10){
if (pop_sims[i,j]*exp(r[i,j]) <2) {
pop_sims[i+1,j]<- 0}
else {
pop_sims[i+1,j] <- pop_sims[i,j]*exp(rnorm(1,mean=0.02, sd=0.1))}
}}
循環幾乎不是在R中完成任務的最佳方法。聽起來你想要將一些初始值乘以隨機數的累積乘積,並將其存儲為矩陣的列。 cumprod
是如何獲得R中的累積產品:
tmax = 100
initial.row = 1:10
rbind(initial.row, sapply(initial.row,
function(x) x*cumprod(exp(rnorm(tmax-1, mean=.02, sd=.1)))))
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
# initial.row 1.000000 2.000000 3.000000 4.000000 5.000000 6.000000 7.000000 8.000000 9.000000 10.000000
# 1.211479 2.483438 3.376012 3.684407 5.611144 5.689530 6.115748 7.809380 8.364223 10.748108
# 1.221254 2.832064 3.500622 3.417095 5.047067 5.706181 6.445985 9.031854 8.125584 10.115107
# 1.350398 3.002284 3.723416 3.581471 5.121880 7.300373 8.008373 10.679728 7.167270 10.310810
# 1.269193 2.883153 3.546245 3.160029 5.312947 7.983395 6.986608 11.226517 7.166026 9.195459
# ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.