循环循环以在特定迭代后临时修改计算

时间:2014-11-25 09:20:24

标签: r loops

我在循环中进行计算。我希望在迭代达到一定数量时更改计算。我一直试图在第一个循环中运行另一个循环,以根据需要改变计算。这可能是一种完全错误的方法。建议欢迎。

u=seq(0,4,length=10) 
v=dexp(u,rate=1) ##exponential decay 
w=0.87*v #the vector that I want to apply to calculations
x=25 #the iteration where I want to start altering the main loop calcs, from here to here + length(w


test=data.frame(seq(1,150,2),seq(151,300,2))##some data
for(y in 1:(length(test)))
{
res=test[,1]*test[,2]###the main calculation of the loop, simplified
for(z in x:x+(length(w)))###on iteration x=25 start this secondary loop after running the first loop
{
res[z+1]=res[z]-(res[z]*w[z])   
}
}
plot(cumsum(res))

这不符合预期,我正在寻找增加的下降或在图上x = 25的展平。

1 个答案:

答案 0 :(得分:0)

以下更改了迭代25之后的计算:

u=seq(0,4,length=10) 
v=dexp(u,rate=1)
w=0.87*v 
test=data.frame(seq(1,150,2),seq(151,300,2))
res <- numeric(length=75)

for(y in seq(nrow(test)))
{
  ifelse(y < 25, res[y] <- test[y,1]*test[y,2], res[y] <- NA) 
}
res[is.na(res)]<-res[24]

res2 <- as.data.frame(res)
res2 <- sweep(res2,MARGIN=2,w,`*`)
res2 <- as.numeric(as.matrix(res2))

res <- append(res[1:24],res2[25:75])

plot(cumsum(res))

你想和w做什么?我已经从迭代25中回收了矢量。