for循环只有每5次迭代的条件

时间:2018-02-20 16:32:28

标签: r nested

我正在尝试创建一个for循环来更新矩阵以进行迭代,但我希望它每隔5次迭代就做一些不同的事情。如何在不制作多个if语句的情况下实现此目的。基本上,我如何简化包含仅适用于每5次迭代的for循环。

这是我的代码:

NCols=5
NRows=5 
mymat<-matrix(runif(NCols*NRows), ncol=NCols) 
matlist <- list()
matlist[[1]] <- mymat

days <- 50

for (i in 2:days){
        matlist[[i]] <- matlist[[i-1]]*2
        if (i == 5){
                matlist[[i]][2,2] <- matlist[[i]][2,2]+1
          }
}

2 个答案:

答案 0 :(得分:1)

您可以将if语句写为:每当i除以5的余数等于0时。

代码中if (i %% 5 == 0)代替if (i == 5)即可。

答案 1 :(得分:0)

你的循环似乎从2开始,所以第一次第五次迭代将是i = 6.So,基于代码将是: -

NCols=5
NRows=5 
mymat<-matrix(runif(NCols*NRows), ncol=NCols) 
matlist <- list()
matlist[[1]] <- mymat

days <- 50

for (i in 2:days){
        matlist[[i]] <- matlist[[i-1]]*2
        if (i-1 %% 5 == 0){
                matlist[[i]][2,2] <- matlist[[i]][2,2]+1
        }
}

但如果你想要i = 5,10,15 .... n那么: -

NCols=5
NRows=5 
mymat<-matrix(runif(NCols*NRows), ncol=NCols) 
matlist <- list()
matlist[[1]] <- mymat

days <- 50

for (i in 2:days){
        matlist[[i]] <- matlist[[i-1]]*2
        if (i %% 5 == 0){
                matlist[[i]][2,2] <- matlist[[i]][2,2]+1
        }
}